From d37726f4c000c3b9d25f5a379f5d3ff3897550e9 Mon Sep 17 00:00:00 2001 From: Nikolay Zhuravlev Date: Sun, 31 Mar 2024 14:36:22 +0200 Subject: [PATCH] Switch to Django 2.0.13, Take 3; fix flake --- anytask/courses/models.py | 66 ++++++++++++++++++++++++++------ anytask/invites/models.py | 13 ++++++- anytask/issues/models.py | 45 ++++++++++++++++++---- anytask/lessons/models.py | 9 ++++- anytask/mail/models.py | 9 ++++- anytask/mail/tests.py | 4 +- anytask/manage.py | 2 + anytask/tasks/models.py | 80 +++++++++++++++++++++++++++++++-------- anytask/urls.py | 4 +- anytask/users/models.py | 27 +++++++++++-- 10 files changed, 212 insertions(+), 47 deletions(-) diff --git a/anytask/courses/models.py b/anytask/courses/models.py index bd550095..7ffb9db0 100644 --- a/anytask/courses/models.py +++ b/anytask/courses/models.py @@ -95,7 +95,14 @@ class Course(models.Model): information = models.TextField(db_index=False, null=True, blank=True) - year = models.ForeignKey(Year, db_index=True, null=False, blank=False, default=timezone.now().year, on_delete=models.DO_NOTHING) + year = models.ForeignKey( + Year, + db_index=True, + null=False, + blank=False, + default=timezone.now().year, + on_delete=models.DO_NOTHING, + ) is_active = models.BooleanField(db_index=True, null=False, blank=False, default=False) @@ -126,10 +133,21 @@ class Course(models.Model): can_be_chosen_by_extern = models.BooleanField(db_index=False, null=False, blank=False, default=False) group_with_extern = models.ForeignKey( - Group, related_name="course_with_extern", db_index=False, null=True, blank=True, on_delete=models.DO_NOTHING + Group, + related_name="course_with_extern", + db_index=False, + null=True, + blank=True, + on_delete=models.DO_NOTHING, ) - mark_system = models.ForeignKey(CourseMarkSystem, db_index=False, null=True, blank=True, on_delete=models.DO_NOTHING) + mark_system = models.ForeignKey( + CourseMarkSystem, + db_index=False, + null=True, + blank=True, + on_delete=models.DO_NOTHING, + ) show_accepted_after_contest_ok = models.BooleanField(db_index=False, null=False, blank=False, default=False) default_accepted_after_contest_ok = models.BooleanField(db_index=False, null=False, blank=False, default=False) @@ -139,7 +157,14 @@ class Course(models.Model): default_task_send_to_users = models.BooleanField(db_index=False, null=False, blank=False, default=False) - issue_status_system = models.ForeignKey(IssueStatusSystem, db_index=False, null=False, blank=False, default=1, on_delete=models.DO_NOTHING) + issue_status_system = models.ForeignKey( + IssueStatusSystem, + db_index=False, + null=False, + blank=False, + default=1, + on_delete=models.DO_NOTHING, + ) is_python_task = models.BooleanField(db_index=False, null=False, blank=False, default=False) max_students_per_task = models.IntegerField(null=False, blank=False, default=0) @@ -276,9 +301,15 @@ def is_contest_integrated(self): class DefaultTeacher(models.Model): - teacher = models.ForeignKey(User, db_index=False, null=True, blank=True, on_delete=models.DO_NOTHING) - course = models.ForeignKey(Course, db_index=True, null=False, blank=False, on_delete=models.DO_NOTHING) - group = models.ForeignKey(Group, db_index=True, null=True, blank=True, on_delete=models.DO_NOTHING) + teacher = models.ForeignKey( + User, db_index=False, null=True, blank=True, on_delete=models.DO_NOTHING + ) + course = models.ForeignKey( + Course, db_index=True, null=False, blank=False, on_delete=models.DO_NOTHING + ) + group = models.ForeignKey( + Group, db_index=True, null=True, blank=True, on_delete=models.DO_NOTHING + ) def __str__(self): return u"|".join((self.course.name, self.group.name, self.teacher.username)) @@ -288,11 +319,24 @@ class Meta: class StudentCourseMark(models.Model): - student = models.ForeignKey(User, db_index=True, null=False, blank=False, on_delete=models.DO_NOTHING) - course = models.ForeignKey(Course, db_index=False, null=False, blank=False, on_delete=models.DO_NOTHING) - mark = models.ForeignKey(MarkField, db_index=False, null=True, blank=True, on_delete=models.DO_NOTHING) + student = models.ForeignKey( + User, db_index=True, null=False, blank=False, on_delete=models.DO_NOTHING + ) + course = models.ForeignKey( + Course, db_index=False, null=False, blank=False, on_delete=models.DO_NOTHING + ) + mark = models.ForeignKey( + MarkField, db_index=False, null=True, blank=True, on_delete=models.DO_NOTHING + ) - teacher = models.ForeignKey(User, related_name='teacher_change_mark', db_index=False, null=True, blank=True, on_delete=models.DO_NOTHING) + teacher = models.ForeignKey( + User, + related_name="teacher_change_mark", + db_index=False, + null=True, + blank=True, + on_delete=models.DO_NOTHING, + ) update_time = models.DateTimeField(auto_now=True) # remove default=timezone.now def __str__(self): diff --git a/anytask/invites/models.py b/anytask/invites/models.py index 7f3a5642..06b95417 100644 --- a/anytask/invites/models.py +++ b/anytask/invites/models.py @@ -14,8 +14,17 @@ class Invite(models.Model): - generated_by = models.ForeignKey(User, db_index=False, null=False, blank=False, related_name='invite_generated_by', on_delete=models.DO_NOTHING) - group = models.ForeignKey(Group, db_index=False, null=True, blank=True, on_delete=models.DO_NOTHING) + generated_by = models.ForeignKey( + User, + db_index=False, + null=False, + blank=False, + related_name="invite_generated_by", + on_delete=models.DO_NOTHING, + ) + group = models.ForeignKey( + Group, db_index=False, null=True, blank=True, on_delete=models.DO_NOTHING + ) invited_users = models.ManyToManyField(User, blank=True) key = models.CharField(max_length=10, db_index=True, null=False, blank=False, unique=True) diff --git a/anytask/issues/models.py b/anytask/issues/models.py index 0c02bd82..95831cd2 100644 --- a/anytask/issues/models.py +++ b/anytask/issues/models.py @@ -39,7 +39,7 @@ def normalize_decimal(number): class File(models.Model): file = models.FileField(upload_to=get_file_path, null=True, blank=True, max_length=500) - event = models.ForeignKey('Event', on_delete=models.DO_NOTHING) + event = models.ForeignKey("Event", on_delete=models.DO_NOTHING) deleted = models.BooleanField(default=False) def filename(self): @@ -47,17 +47,33 @@ def filename(self): class Issue(models.Model): - student = models.ForeignKey(User, db_index=True, null=False, blank=False, related_name='student', on_delete=models.DO_NOTHING) + student = models.ForeignKey( + User, + db_index=True, + null=False, + blank=False, + related_name="student", + on_delete=models.DO_NOTHING, + ) costudents = models.ManyToManyField(User, blank=True, db_index=True, related_name='costudents') - task = models.ForeignKey(Task, db_index=True, null=True, blank=False, on_delete=models.DO_NOTHING) + task = models.ForeignKey( + Task, db_index=True, null=True, blank=False, on_delete=models.DO_NOTHING + ) mark = models.FloatField(db_index=False, null=False, blank=False, default=0) create_time = models.DateTimeField(auto_now_add=True) # remove default=timezone.now update_time = models.DateTimeField(default=timezone.now) - responsible = models.ForeignKey(User, db_index=True, null=True, blank=True, related_name='responsible', on_delete=models.DO_NOTHING) + responsible = models.ForeignKey( + User, + db_index=True, + null=True, + blank=True, + related_name="responsible", + on_delete=models.DO_NOTHING, + ) followers = models.ManyToManyField(User, blank=True) STATUS_NEW = 'new' @@ -81,7 +97,14 @@ class Issue(models.Model): ) status = models.CharField(max_length=20, choices=ISSUE_STATUSES, default=STATUS_NEW) - status_field = models.ForeignKey(IssueStatus, db_index=True, null=False, blank=False, default=1, on_delete=models.DO_NOTHING) + status_field = models.ForeignKey( + IssueStatus, + db_index=True, + null=False, + blank=False, + default=1, + on_delete=models.DO_NOTHING, + ) def is_status_accepted(self): return self.status_field.tag in [IssueStatus.STATUS_ACCEPTED, IssueStatus.STATUS_ACCEPTED_AFTER_DEADLINE] @@ -534,9 +557,15 @@ class Meta: class Event(models.Model): - issue = models.ForeignKey(Issue, null=False, blank=False, on_delete=models.DO_NOTHING) - author = models.ForeignKey(User, db_index=True, null=True, blank=True, on_delete=models.DO_NOTHING) - field = models.ForeignKey(IssueField, blank=False, default=1, on_delete=models.DO_NOTHING) + issue = models.ForeignKey( + Issue, null=False, blank=False, on_delete=models.DO_NOTHING + ) + author = models.ForeignKey( + User, db_index=True, null=True, blank=True, on_delete=models.DO_NOTHING + ) + field = models.ForeignKey( + IssueField, blank=False, default=1, on_delete=models.DO_NOTHING + ) value = models.TextField(max_length=2500, blank=True) timestamp = models.DateTimeField(auto_now_add=True) diff --git a/anytask/lessons/models.py b/anytask/lessons/models.py index 14d2dc15..0453e7a0 100644 --- a/anytask/lessons/models.py +++ b/anytask/lessons/models.py @@ -16,7 +16,14 @@ class Lesson(models.Model): course = models.ForeignKey(Course, db_index=True, null=False, blank=False, on_delete=models.DO_NOTHING) group = models.ForeignKey(Group, null=False, blank=False, on_delete=models.DO_NOTHING) not_visited_students = models.ManyToManyField(User, blank=True) - updated_by = models.ForeignKey(User, db_index=False, null=True, blank=True, related_name='authors', on_delete=models.DO_NOTHING) + updated_by = models.ForeignKey( + User, + db_index=False, + null=True, + blank=True, + related_name="authors", + on_delete=models.DO_NOTHING, + ) schedule_id = models.CharField(max_length=100, db_index=True, null=True, blank=True) position = models.IntegerField(db_index=True, null=True, blank=True) diff --git a/anytask/mail/models.py b/anytask/mail/models.py index 61fc309e..c7607522 100644 --- a/anytask/mail/models.py +++ b/anytask/mail/models.py @@ -11,7 +11,14 @@ class Message(models.Model): - sender = models.ForeignKey(User, db_index=False, null=False, blank=False, related_name='sender+', on_delete=models.DO_NOTHING) + sender = models.ForeignKey( + User, + db_index=False, + null=False, + blank=False, + related_name="sender+", + on_delete=models.DO_NOTHING, + ) recipients = models.ManyToManyField(User, db_index=False, blank=False, related_name='recipients+') recipients_user = models.ManyToManyField(User, db_index=False, blank=True, related_name='recipients_user+') diff --git a/anytask/mail/tests.py b/anytask/mail/tests.py index 524c6889..5b77b5c0 100644 --- a/anytask/mail/tests.py +++ b/anytask/mail/tests.py @@ -85,14 +85,14 @@ def setUp(self): self.recipients_group = [Group.objects.create(name='group1_name', year=self.year)] - self.recipients_group[0].students = [self.user_in_group] + self.recipients_group[0].students.set([self.user_in_group]) self.recipients_course = [Course.objects.create(name='course_name', year=self.year)] self.group_in_course = Group.objects.create(name='group2_name', year=self.year) self.group_in_course.students = [self.user_in_course] - self.recipients_course[0].groups = [self.group_in_course] + self.recipients_course[0].groups.set([self.group_in_course]) self.recipients = [self.user, self.user_in_group, self.user_in_course] diff --git a/anytask/manage.py b/anytask/manage.py index a844192d..da5b2b0d 100755 --- a/anytask/manage.py +++ b/anytask/manage.py @@ -7,6 +7,7 @@ sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) locale.setlocale(locale.LC_ALL, '') + def main(): os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'anytask.settings') try: @@ -23,5 +24,6 @@ def main(): # see https://code.djangoproject.com/ticket/17966 sys.modules['django.contrib.auth.tests'] = None + if __name__ == '__main__': main() diff --git a/anytask/tasks/models.py b/anytask/tasks/models.py index 545f3ab6..6a1ad34f 100644 --- a/anytask/tasks/models.py +++ b/anytask/tasks/models.py @@ -40,15 +40,31 @@ def get_lang_text(text, lang): class Task(models.Model): title = models.CharField(max_length=191, db_index=True, null=True, blank=True) short_title = models.CharField(max_length=15, db_index=True, null=True, blank=True) - course = models.ForeignKey(Course, db_index=True, null=False, blank=False, on_delete=models.DO_NOTHING) - group = models.ForeignKey(Group, db_index=False, null=True, blank=True, default=None, on_delete=models.DO_NOTHING) - groups = models.ManyToManyField(Group, blank=False, related_name='groups_set') + course = models.ForeignKey( + Course, db_index=True, null=False, blank=False, on_delete=models.DO_NOTHING + ) + group = models.ForeignKey( + Group, + db_index=False, + null=True, + blank=True, + default=None, + on_delete=models.DO_NOTHING, + ) + groups = models.ManyToManyField(Group, blank=False, related_name="groups_set") weight = models.IntegerField(db_index=True, null=False, blank=False, default=0) is_hidden = models.BooleanField(db_index=True, null=False, blank=False, default=False) - parent_task = models.ForeignKey('self', db_index=True, null=True, blank=True, related_name='children', on_delete=models.DO_NOTHING) + parent_task = models.ForeignKey( + "self", + db_index=True, + null=True, + blank=True, + related_name="children", + on_delete=models.DO_NOTHING, + ) task_text = models.TextField(null=True, blank=True, default=None) @@ -78,7 +94,9 @@ class Task(models.Model): update_time = models.DateTimeField(auto_now=True) # remove default=timezone.now deadline_time = models.DateTimeField(auto_now=False, blank=True, null=True, default=None) - updated_by = models.ForeignKey(User, db_index=False, null=True, blank=True, on_delete=models.DO_NOTHING) + updated_by = models.ForeignKey( + User, db_index=False, null=True, blank=True, on_delete=models.DO_NOTHING + ) contest_id = models.IntegerField(db_index=True, null=False, blank=False, default=0) problem_id = models.CharField(max_length=128, db_index=True, null=True, blank=True) @@ -265,13 +283,29 @@ def get_url_in_course(self): class TaskLog(models.Model): title = models.CharField(max_length=191, db_index=True, null=True, blank=True) - course = models.ForeignKey(Course, db_index=False, null=False, blank=False, on_delete=models.DO_NOTHING) - group = models.ForeignKey(Group, db_index=False, null=True, blank=True, default=None, on_delete=models.DO_NOTHING) - groups = models.ManyToManyField(Group, blank=False, related_name='groups_log_set') + course = models.ForeignKey( + Course, db_index=False, null=False, blank=False, on_delete=models.DO_NOTHING + ) + group = models.ForeignKey( + Group, + db_index=False, + null=True, + blank=True, + default=None, + on_delete=models.DO_NOTHING, + ) + groups = models.ManyToManyField(Group, blank=False, related_name="groups_log_set") weight = models.IntegerField(db_index=False, null=False, blank=False, default=0) - parent_task = models.ForeignKey('self', db_index=True, null=True, blank=True, related_name='parent_task_set', on_delete=models.DO_NOTHING) + parent_task = models.ForeignKey( + "self", + db_index=True, + null=True, + blank=True, + related_name="parent_task_set", + on_delete=models.DO_NOTHING, + ) task_text = models.TextField(null=True, blank=True, default=None) @@ -292,7 +326,9 @@ class TaskLog(models.Model): update_time = models.DateTimeField(auto_now=True) # remove default=timezone.now deadline_time = models.DateTimeField(auto_now=False, null=True, default=None) - updated_by = models.ForeignKey(User, db_index=False, null=True, blank=True, on_delete=models.DO_NOTHING) + updated_by = models.ForeignKey( + User, db_index=False, null=True, blank=True, on_delete=models.DO_NOTHING + ) contest_id = models.IntegerField(db_index=True, null=False, blank=False, default=0) problem_id = models.CharField(max_length=128, db_index=True, null=True, blank=True) @@ -308,9 +344,19 @@ class TaskTaken(models.Model): STATUS_SCORED = 3 STATUS_DELETED = 4 - user = models.ForeignKey(User, db_index=True, null=False, blank=False, on_delete=models.DO_NOTHING) - task = models.ForeignKey(Task, db_index=True, null=False, blank=False, on_delete=models.DO_NOTHING) - issue = models.ForeignKey('issues.Issue', db_index=True, null=True, blank=False, on_delete=models.DO_NOTHING) + user = models.ForeignKey( + User, db_index=True, null=False, blank=False, on_delete=models.DO_NOTHING + ) + task = models.ForeignKey( + Task, db_index=True, null=False, blank=False, on_delete=models.DO_NOTHING + ) + issue = models.ForeignKey( + "issues.Issue", + db_index=True, + null=True, + blank=False, + on_delete=models.DO_NOTHING, + ) TASK_TAKEN_STATUSES = ( (STATUS_TAKEN, u'Task taken'), @@ -391,8 +437,12 @@ def __str__(self): class TaskGroupRelations(models.Model): - task = models.ForeignKey(Task, db_index=False, null=False, blank=False, on_delete=models.DO_NOTHING) - group = models.ForeignKey(Group, db_index=False, null=False, blank=False, on_delete=models.DO_NOTHING) + task = models.ForeignKey( + Task, db_index=False, null=False, blank=False, on_delete=models.DO_NOTHING + ) + group = models.ForeignKey( + Group, db_index=False, null=False, blank=False, on_delete=models.DO_NOTHING + ) position = models.IntegerField(db_index=False, null=False, blank=False, default=0) diff --git a/anytask/urls.py b/anytask/urls.py index 45ea9a27..987413c9 100644 --- a/anytask/urls.py +++ b/anytask/urls.py @@ -7,15 +7,13 @@ import index.views import admission.views -import courses.urls -import issues.urls - from middleware.lang_middleware import set_lang_view, get_lang_view # Uncomment the next two lines to enable the admin: from django.contrib import admin admin.autodiscover() + urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^course/', include('courses.urls')), diff --git a/anytask/users/models.py b/anytask/users/models.py index a0fcfebd..35fb12e7 100644 --- a/anytask/users/models.py +++ b/anytask/users/models.py @@ -22,7 +22,15 @@ def get_upload_path(instance, filename): class UserProfile(models.Model): - user = models.OneToOneField(User, db_index=True, null=False, blank=False, unique=True, related_name='profile', on_delete=models.DO_NOTHING) + user = models.OneToOneField( + User, + db_index=True, + null=False, + blank=False, + unique=True, + related_name="profile", + on_delete=models.DO_NOTHING, + ) middle_name = models.CharField(max_length=128, db_index=True, null=True, blank=True) user_status = models.ManyToManyField(UserStatus, db_index=True, blank=True, related_name='users_by_status') @@ -58,7 +66,9 @@ class UserProfile(models.Model): added_time = models.DateTimeField(auto_now_add=True) # remove default=timezone.now update_time = models.DateTimeField(auto_now=True) # remove default=timezone.now - updated_by = models.ForeignKey(User, db_index=False, null=True, blank=True, on_delete=models.DO_NOTHING) + updated_by = models.ForeignKey( + User, db_index=False, null=True, blank=True, on_delete=models.DO_NOTHING + ) login_via_yandex = models.BooleanField(db_index=False, null=False, blank=False, default=False) @@ -113,7 +123,14 @@ def can_sync_contest(self): class UserProfileLog(models.Model): - user = models.ForeignKey(User, db_index=True, null=False, blank=False, related_name='profiles_logs_by_user', on_delete=models.DO_NOTHING) + user = models.ForeignKey( + User, + db_index=True, + null=False, + blank=False, + related_name="profiles_logs_by_user", + on_delete=models.DO_NOTHING, + ) middle_name = models.CharField(max_length=128, db_index=True, null=True, blank=True) user_status = models.ManyToManyField(UserStatus, db_index=True, blank=True) @@ -168,7 +185,9 @@ class UserProfileLog(models.Model): language = models.CharField(default="ru", max_length=128, unique=False, null=True, blank=True) - updated_by = models.ForeignKey(User, db_index=False, null=True, blank=True, on_delete=models.DO_NOTHING) + updated_by = models.ForeignKey( + User, db_index=False, null=True, blank=True, on_delete=models.DO_NOTHING + ) def is_current_year_student(self): return Group.objects.filter(year=get_current_year()).filter(students=self.user).count() > 0