Skip to content
Snippets Groups Projects
Unverified Commit 0fdb3fce authored by M. Zulqarnain's avatar M. Zulqarnain Committed by GitHub
Browse files

pyupgrade on survey, teams and tests apps (#26647)

parent 57684f99
No related branches found
No related tags found
No related merge requests found
Showing
with 61 additions and 69 deletions
......@@ -12,7 +12,7 @@ from lms.djangoapps.survey.models import SurveyForm
class SurveyFormAdminForm(forms.ModelForm):
"""Form providing validation of SurveyForm content."""
class Meta(object):
class Meta:
model = SurveyForm
fields = ('name', 'form')
......
# -*- coding: utf-8 -*-
from django.db import migrations, models
import django.utils.timezone
from django.conf import settings
......
......@@ -13,9 +13,9 @@ from lxml import etree
from model_utils.models import TimeStampedModel
from opaque_keys.edx.django.models import CourseKeyField
from openedx.core.djangolib.markup import HTML
from common.djangoapps.student.models import User
from lms.djangoapps.survey.exceptions import SurveyFormNameAlreadyExists, SurveyFormNotFound
from openedx.core.djangolib.markup import HTML
log = logging.getLogger("edx.survey")
......@@ -33,7 +33,7 @@ class SurveyForm(TimeStampedModel):
name = models.CharField(max_length=255, db_index=True, unique=True)
form = models.TextField()
class Meta(object):
class Meta:
app_label = 'survey'
def __str__(self):
......@@ -48,7 +48,7 @@ class SurveyForm(TimeStampedModel):
self.validate_form_html(self.form)
# now call the actual save method
super(SurveyForm, self).save(*args, **kwargs) # lint-amnesty, pylint: disable=super-with-arguments
super().save(*args, **kwargs)
@classmethod
def validate_form_html(cls, html):
......@@ -58,8 +58,8 @@ class SurveyForm(TimeStampedModel):
try:
fields = cls.get_field_names_from_html(html)
except Exception as ex:
log.exception(u"Cannot parse SurveyForm html: {}".format(ex))
raise ValidationError(u"Cannot parse SurveyForm as HTML: {}".format(ex)) # lint-amnesty, pylint: disable=raise-missing-from
log.exception(f"Cannot parse SurveyForm html: {ex}")
raise ValidationError(f"Cannot parse SurveyForm as HTML: {ex}") # lint-amnesty, pylint: disable=raise-missing-from
if not len(fields): # lint-amnesty, pylint: disable=len-as-condition
raise ValidationError("SurveyForms must contain at least one form input field")
......@@ -152,7 +152,7 @@ class SurveyForm(TimeStampedModel):
# make sure the form is wrap in some outer single element
# otherwise lxml can't parse it
# NOTE: This wrapping doesn't change the ability to query it
tree = etree.fromstring(HTML(u'<div>{}</div>').format(HTML(html)))
tree = etree.fromstring(HTML('<div>{}</div>').format(HTML(html)))
input_fields = (
tree.findall('.//input') + tree.findall('.//select') +
......@@ -183,7 +183,7 @@ class SurveyAnswer(TimeStampedModel):
# since it didn't exist in the beginning, it is nullable
course_key = CourseKeyField(max_length=255, db_index=True, null=True)
class Meta(object):
class Meta:
app_label = 'survey'
@classmethod
......
......@@ -5,8 +5,8 @@ Signal handlers for the survey app
from django.dispatch.dispatcher import receiver
from openedx.core.djangoapps.user_api.accounts.signals import USER_RETIRE_LMS_MISC
from lms.djangoapps.survey.models import SurveyAnswer
from openedx.core.djangoapps.user_api.accounts.signals import USER_RETIRE_LMS_MISC
@receiver(USER_RETIRE_LMS_MISC)
......
......@@ -6,7 +6,7 @@ from lms.djangoapps.survey.models import SurveyAnswer, SurveyForm
class SurveyFormFactory(factory.DjangoModelFactory): # lint-amnesty, pylint: disable=missing-class-docstring
class Meta(object):
class Meta:
model = SurveyForm
name = 'Test Survey Form'
......@@ -14,7 +14,7 @@ class SurveyFormFactory(factory.DjangoModelFactory): # lint-amnesty, pylint: di
class SurveyAnswerFactory(factory.DjangoModelFactory): # lint-amnesty, pylint: disable=missing-class-docstring
class Meta(object):
class Meta:
model = SurveyAnswer
user = factory.SubFactory(UserFactory)
......
......@@ -4,8 +4,9 @@ Python tests for the Survey models
from collections import OrderedDict
import pytest
import ddt
import pytest
import six
from django.contrib.auth.models import User # lint-amnesty, pylint: disable=imported-auth-user
from django.core.exceptions import ValidationError
......@@ -26,7 +27,7 @@ class SurveyModelsTests(TestCase):
"""
Set up the test data used in the specific tests
"""
super(SurveyModelsTests, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
super().setUp()
self.client = Client()
# Create two accounts
......@@ -96,7 +97,7 @@ class SurveyModelsTests(TestCase):
"""
survey = self._create_test_survey()
assert survey is not None
assert six.text_type(survey) == self.test_survey_name
assert str(survey) == self.test_survey_name
def test_create_form_with_malformed_html(self):
"""
......@@ -189,7 +190,7 @@ class SurveyModelsTests(TestCase):
for answer_obj in answer_objs:
if course_id:
assert six.text_type(answer_obj.course_key) == course_id
assert str(answer_obj.course_key) == course_id
else:
assert answer_obj.course_key is None
......
......@@ -3,11 +3,11 @@ Test signal handlers for the survey app
"""
from lms.djangoapps.survey.signals import _listen_for_lms_retire
from openedx.core.djangoapps.user_api.accounts.tests.retirement_helpers import fake_completed_retirement
from common.djangoapps.student.tests.factories import UserFactory
from lms.djangoapps.survey.models import SurveyAnswer
from lms.djangoapps.survey.signals import _listen_for_lms_retire
from lms.djangoapps.survey.tests.factories import SurveyAnswerFactory
from openedx.core.djangoapps.user_api.accounts.tests.retirement_helpers import fake_completed_retirement
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
......
......@@ -23,7 +23,7 @@ class SurveyModelsTests(ModuleStoreTestCase):
"""
Set up the test data used in the specific tests
"""
super(SurveyModelsTests, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
super().setUp()
self.client = Client()
......
......@@ -25,7 +25,7 @@ class SurveyViewsTests(ModuleStoreTestCase):
"""
Set up the test data used in the specific tests
"""
super(SurveyViewsTests, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
super().setUp()
self.client = Client()
......@@ -40,10 +40,10 @@ class SurveyViewsTests(ModuleStoreTestCase):
'''
self.student_answers = OrderedDict({
u'field1': u'value1',
u'field2': u'value2',
u'ddl': u'1',
u'textarea': u'textarea'
'field1': 'value1',
'field2': 'value2',
'ddl': '1',
'textarea': 'textarea'
})
self.course = CourseFactory.create(
......@@ -130,7 +130,7 @@ class SurveyViewsTests(ModuleStoreTestCase):
data['csrfmiddlewaretoken'] = 'foo'
data['_redirect_url'] = 'bar'
data['course_id'] = six.text_type(self.course.id)
data['course_id'] = str(self.course.id)
resp = self.client.post(
self.postback_url,
......@@ -149,7 +149,7 @@ class SurveyViewsTests(ModuleStoreTestCase):
)
for answer_obj in answer_objs:
assert six.text_type(answer_obj.course_key) == data['course_id']
assert str(answer_obj.course_key) == data['course_id']
def test_encoding_answers(self):
"""
......
......@@ -16,9 +16,9 @@ class SurveyRequiredAccessError(AccessError):
"""
def __init__(self):
error_code = "survey_required"
developer_message = u"User must complete a survey"
user_message = _(u"You must complete a survey")
super(SurveyRequiredAccessError, self).__init__(error_code, developer_message, user_message) # lint-amnesty, pylint: disable=super-with-arguments
developer_message = "User must complete a survey"
user_message = _("You must complete a survey")
super().__init__(error_code, developer_message, user_message)
def is_survey_required_for_course(course_descriptor):
......
......@@ -15,8 +15,8 @@ from django.views.decorators.http import require_POST
from opaque_keys.edx.keys import CourseKey
from common.djangoapps.edxmako.shortcuts import render_to_response
from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
from lms.djangoapps.survey.models import SurveyForm
from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
log = logging.getLogger("edx.survey")
......
......@@ -11,12 +11,12 @@ from opaque_keys import InvalidKeyError
from opaque_keys.edx.keys import CourseKey
from common.djangoapps.course_modes.models import CourseMode
from common.djangoapps.student.models import CourseEnrollment, anonymous_id_for_user
from common.djangoapps.student.roles import CourseInstructorRole, CourseStaffRole
from lms.djangoapps.courseware.courses import has_access
from lms.djangoapps.discussion.django_comment_client.utils import has_discussion_privileges
from lms.djangoapps.teams.models import CourseTeam, CourseTeamMembership
from openedx.core.lib.teams_config import TeamsetType
from common.djangoapps.student.models import CourseEnrollment, anonymous_id_for_user
from common.djangoapps.student.roles import CourseInstructorRole, CourseStaffRole
from xmodule.modulestore.django import modulestore
logger = logging.getLogger(__name__)
......@@ -349,7 +349,7 @@ def get_team_for_user_course_topic(user, course_id, topic_id):
try:
course_key = CourseKey.from_string(course_id)
except InvalidKeyError:
raise ValueError(u"The supplied course id {course_id} is not valid.".format( # lint-amnesty, pylint: disable=raise-missing-from
raise ValueError("The supplied course id {course_id} is not valid.".format( # lint-amnesty, pylint: disable=raise-missing-from
course_id=course_id
))
try:
......
......@@ -8,15 +8,16 @@ from collections import Counter
from django.contrib.auth.models import User # lint-amnesty, pylint: disable=imported-auth-user
from django.db.models import Prefetch
from common.djangoapps.student.models import CourseEnrollment
from lms.djangoapps.program_enrollments.models import ProgramCourseEnrollment, ProgramEnrollment
from lms.djangoapps.teams.api import (
ORGANIZATION_PROTECTED_MODES,
OrganizationProtectionStatus,
user_organization_protection_status,
ORGANIZATION_PROTECTED_MODES,
user_protection_status_matches_team
)
from lms.djangoapps.teams.models import CourseTeam, CourseTeamMembership
from lms.djangoapps.program_enrollments.models import ProgramCourseEnrollment, ProgramEnrollment
from common.djangoapps.student.models import CourseEnrollment
from .utils import emit_team_event
......@@ -141,7 +142,7 @@ def _group_teamset_memberships_by_user(course_team_memberships):
return teamset_memberships_by_user
class TeamMembershipImportManager(object):
class TeamMembershipImportManager:
"""
A manager class that is responsible the import process of csv file including validation and creation of
team_courseteam and teams_courseteammembership objects.
......@@ -170,7 +171,7 @@ class TeamMembershipImportManager(object):
"""
Parse an input CSV file and pass to `set_team_memberships` for processing
"""
csv_reader = csv.DictReader((line.decode('utf-8-sig').strip() for line in input_file.readlines()))
csv_reader = csv.DictReader(line.decode('utf-8-sig').strip() for line in input_file.readlines())
return self.set_team_memberships(csv_reader)
def set_team_memberships(self, csv_reader):
......@@ -299,7 +300,7 @@ class TeamMembershipImportManager(object):
Ensures that username exists only once in an input file
"""
if username in usernames_found_so_far:
error_message = 'Username {} listed more than once in file.'.format(username)
error_message = f'Username {username} listed more than once in file.'
if self.add_error_and_check_if_max_exceeded(error_message):
return False
return True
......@@ -314,7 +315,7 @@ class TeamMembershipImportManager(object):
This method will add a validation error and return False if this is the case.
"""
if None in row:
error_message = "Team(s) {0} don't have matching teamsets.".format(
error_message = "Team(s) {} don't have matching teamsets.".format(
row[None]
)
if self.add_error_and_check_if_max_exceeded(error_message):
......@@ -374,7 +375,7 @@ class TeamMembershipImportManager(object):
if self.is_FERPA_bubble_breached(teamset_id, team_name) or \
not self.is_enrollment_protection_for_existing_team_matches_user(user, team_name, teamset_id):
error_message = \
'Team {} cannot have Master’s track users mixed with users in other tracks.'.format(team_name)
f'Team {team_name} cannot have Master’s track users mixed with users in other tracks.'
self.add_error_and_check_if_max_exceeded(error_message)
return False
return True
......
......@@ -8,7 +8,6 @@ from textwrap import dedent
from django.conf import settings
from django.core.exceptions import ObjectDoesNotExist
from django.core.management import BaseCommand, CommandError
from six.moves import map
from lms.djangoapps.teams.models import CourseTeam
......@@ -38,7 +37,7 @@ class Command(BaseCommand):
try:
result = CourseTeam.objects.get(team_id=team_id)
except ObjectDoesNotExist:
raise CommandError('Argument {} is not a course_team team_id'.format(team_id)) # lint-amnesty, pylint: disable=raise-missing-from
raise CommandError(f'Argument {team_id} is not a course_team team_id') # lint-amnesty, pylint: disable=raise-missing-from
return result
......@@ -67,5 +66,5 @@ class Command(BaseCommand):
course_teams = list(map(self._get_course_team, options['course_team_ids']))
for course_team in course_teams:
print('Indexing {}'.format(course_team.team_id))
print(f'Indexing {course_team.team_id}')
CourseTeamIndexer.index(course_team)
......@@ -3,9 +3,10 @@ Tests for course_team reindex command.
"""
from unittest.mock import patch
import ddt
from django.core.management import CommandError, call_command
from mock import patch
from opaque_keys.edx.keys import CourseKey
from search.search_engine_base import SearchEngine
......@@ -27,7 +28,7 @@ class ReindexCourseTeamTest(SharedModuleStoreTestCase):
"""
Set up tests.
"""
super(ReindexCourseTeamTest, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
super().setUp()
self.team1 = CourseTeamFactory(course_id=COURSE_KEY1, team_id='team1')
self.team2 = CourseTeamFactory(course_id=COURSE_KEY1, team_id='team2')
......@@ -61,8 +62,8 @@ class ReindexCourseTeamTest(SharedModuleStoreTestCase):
"""
Test that raises CommandError for invalid team id.
"""
team_id = u'team4'
error_str = u'Argument {} is not a course_team team_id'.format(team_id)
team_id = 'team4'
error_str = f'Argument {team_id} is not a course_team team_id'
with self.assertRaisesRegex(CommandError, error_str):
call_command('reindex_course_team', team_id)
......
# -*- coding: utf-8 -*-
import django_countries.fields
from django.conf import settings
from django.db import migrations, models
......@@ -50,6 +47,6 @@ class Migration(migrations.Migration):
),
migrations.AlterUniqueTogether(
name='courseteammembership',
unique_together=set([('user', 'team')]),
unique_together={('user', 'team')},
),
]
# -*- coding: utf-8 -*-
# Generated by Django 1.11.25 on 2019-10-22 14:42
......
# -*- coding: utf-8 -*-
# Generated by Django 1.11.25 on 2019-11-04 19:15
......
# -*- coding: utf-8 -*-
# Generated by Django 1.11.29 on 2020-03-18 15:36
......
......@@ -18,6 +18,7 @@ from django_countries.fields import CountryField
from model_utils import FieldTracker
from opaque_keys.edx.django.models import CourseKeyField
from common.djangoapps.student.models import CourseEnrollment, LanguageField
from lms.djangoapps.teams import TEAM_DISCUSSION_CONTEXT
from lms.djangoapps.teams.utils import emit_team_event
from openedx.core.djangoapps.django_comment_common.signals import (
......@@ -33,13 +34,12 @@ from openedx.core.djangoapps.django_comment_common.signals import (
thread_unfollowed,
thread_voted
)
from common.djangoapps.student.models import CourseEnrollment, LanguageField
from .errors import (
AddToIncompatibleTeamError,
AlreadyOnTeamInTeamset,
ImmutableMembershipFieldException,
NotEnrolledInCourseForTeam,
AddToIncompatibleTeamError
NotEnrolledInCourseForTeam
)
......@@ -112,7 +112,7 @@ class CourseTeam(models.Model):
.. no_pii:
"""
def __str__(self):
return "{} in {}".format(self.name, self.course_id)
return f"{self.name} in {self.course_id}"
def __repr__(self):
return ( # lint-amnesty, pylint: disable=missing-format-attribute
......@@ -125,7 +125,7 @@ class CourseTeam(models.Model):
">"
).format(self)
class Meta(object):
class Meta:
app_label = "teams"
team_id = models.SlugField(max_length=255, unique=True)
......@@ -233,7 +233,7 @@ class CourseTeamMembership(models.Model):
"""
def __str__(self):
return "{} is member of {}".format(self.user.username, self.team)
return f"{self.user.username} is member of {self.team}"
def __repr__(self):
return ( # lint-amnesty, pylint: disable=missing-format-attribute
......@@ -244,7 +244,7 @@ class CourseTeamMembership(models.Model):
">"
).format(self)
class Meta(object):
class Meta:
app_label = "teams"
unique_together = (('user', 'team'),)
......@@ -275,9 +275,9 @@ class CourseTeamMembership(models.Model):
# Allow it *only* if the current value is None.
if current_value is not None:
raise ImmutableMembershipFieldException(
u"Field %r shouldn't change from %r to %r" % (name, current_value, value)
f"Field {name!r} shouldn't change from {current_value!r} to {value!r}"
)
super(CourseTeamMembership, self).__setattr__(name, value) # lint-amnesty, pylint: disable=super-with-arguments
super().__setattr__(name, value)
def save(self, *args, **kwargs): # lint-amnesty, pylint: disable=arguments-differ, signature-differs
"""Customize save method to set the last_activity_at if it does not
......@@ -289,13 +289,13 @@ class CourseTeamMembership(models.Model):
should_reset_team_size = True
if not self.last_activity_at:
self.last_activity_at = datetime.utcnow().replace(tzinfo=pytz.utc)
super(CourseTeamMembership, self).save(*args, **kwargs) # lint-amnesty, pylint: disable=super-with-arguments
super().save(*args, **kwargs)
if should_reset_team_size:
self.team.reset_team_size()
def delete(self, *args, **kwargs): # lint-amnesty, pylint: disable=arguments-differ, signature-differs
"""Recompute the related team's team_size after deleting a membership"""
super(CourseTeamMembership, self).delete(*args, **kwargs) # lint-amnesty, pylint: disable=super-with-arguments
super().delete(*args, **kwargs)
self.team.reset_team_size()
@classmethod
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment