This commit is contained in:
Egor Matveev 2021-11-19 20:51:09 +03:00
parent 1e975a4659
commit 6b6caffcff
8 changed files with 44 additions and 9 deletions

View File

@ -0,0 +1,22 @@
# Generated by Django 3.2.4 on 2021-11-19 17:50
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('Main', '0075_auto_20211110_2317'),
]
operations = [
migrations.RemoveField(
model_name='userinfo',
name='profile_picture',
),
migrations.AddField(
model_name='userinfo',
name='profile_picture_fs_id',
field=models.IntegerField(null=True),
),
]

View File

@ -27,6 +27,7 @@ class Progress(models.Model):
delta = timedelta(minutes=self.task.time_estimation) delta = timedelta(minutes=self.task.time_estimation)
self.score = int(delta / self.time * 100) self.score = int(delta / self.time * 100)
self.save() self.save()
self.user.userinfo.refresh_from_db()
self.user.userinfo.rating += self.score self.user.userinfo.rating += self.score
self.user.userinfo.save() self.user.userinfo.save()

View File

@ -2,9 +2,9 @@ from django.contrib.auth.models import User
from django.db import models from django.db import models
from django.utils import timezone from django.utils import timezone
from Main.models.subscription import Subscription
from Main.models.group import Group from Main.models.group import Group
from Main.models.settask import SetTask from Main.models.settask import SetTask
from Main.models.subscription import Subscription
from Main.models.task import Task from Main.models.task import Task
from Sprint.settings import CONSTS from Sprint.settings import CONSTS
@ -14,7 +14,7 @@ class UserInfo(models.Model):
name = models.TextField() name = models.TextField()
middle_name = models.TextField() middle_name = models.TextField()
last_request = models.DateTimeField(default=timezone.now) last_request = models.DateTimeField(default=timezone.now)
profile_picture = models.ImageField(upload_to="profile_pictures", null=True) profile_picture_fs_id = models.IntegerField(null=True)
rating = models.IntegerField(default=0) rating = models.IntegerField(default=0)
user = models.OneToOneField(User, on_delete=models.CASCADE, null=True) user = models.OneToOneField(User, on_delete=models.CASCADE, null=True)
telegram_chat_id = models.TextField(default="") telegram_chat_id = models.TextField(default="")
@ -59,14 +59,14 @@ class UserInfo(models.Model):
@property @property
def has_profile_pic(self): def has_profile_pic(self):
try: try:
return self.profile_picture.url is not None return self.profile_picture_fs_id is not None
except ValueError: except ValueError:
return False return False
@property @property
def profile_pic_url(self): def profile_pic_url(self):
if self.has_profile_pic: if self.has_profile_pic:
return self.profile_picture.url return "/image?id=" + str(self.profile_picture_fs_id)
return "https://i2.wp.com/electrolabservice.com/wp-content/uploads/2021/01/blank-profile-picture-mystery-man-avatar-973460.jpg" return "https://i2.wp.com/electrolabservice.com/wp-content/uploads/2021/01/blank-profile-picture-mystery-man-avatar-973460.jpg"
def __str__(self): def __str__(self):

View File

@ -2,6 +2,7 @@ from django.contrib.auth import authenticate, login
from django.contrib.auth.models import User from django.contrib.auth.models import User
from SprintLib.BaseView import BaseView from SprintLib.BaseView import BaseView
from SprintLib.utils import delete_file, write_bytes
class AccountView(BaseView): class AccountView(BaseView):
@ -19,8 +20,10 @@ class AccountView(BaseView):
self.context["error_message"] = self.request.GET.get("error_message", "") self.context["error_message"] = self.request.GET.get("error_message", "")
def post_upload_photo(self): def post_upload_photo(self):
self.request.user.userinfo.profile_picture.delete() if self.request.user.userinfo.has_profile_pic:
self.request.user.userinfo.profile_picture = self.request.FILES["file"] delete_file(self.request.user.userinfo.profile_picture_fs_id)
fs_id = write_bytes(self.request.FILES["file"].read())
self.request.user.userinfo.profile_picture_fs_id = fs_id
self.request.user.userinfo.save() self.request.user.userinfo.save()
return "/account" return "/account"

9
Main/views/ImageView.py Normal file
View File

@ -0,0 +1,9 @@
from django.http import HttpResponse
from SprintLib.BaseView import BaseView
from SprintLib.utils import get_bytes
class ImageView(BaseView):
def get(self):
return HttpResponse(get_bytes(int(self.request.GET['id'])), content_type="image/jpg")

View File

@ -11,3 +11,4 @@ from Main.views.TaskView import TaskView
from Main.views.SolutionsTableView import SolutionsTableView from Main.views.SolutionsTableView import SolutionsTableView
from Main.views.TaskRuntimeView import TaskRuntimeView from Main.views.TaskRuntimeView import TaskRuntimeView
from Main.views.SolutionView import SolutionView from Main.views.SolutionView import SolutionView
from Main.views.ImageView import ImageView

View File

@ -17,6 +17,7 @@ urlpatterns = [
path("solution", SolutionView.as_view()), path("solution", SolutionView.as_view()),
path("solutions_table", SolutionsTableView.as_view()), path("solutions_table", SolutionsTableView.as_view()),
path("task_runtime", TaskRuntimeView.as_view()), path("task_runtime", TaskRuntimeView.as_view()),
path("image", ImageView.as_view()),
path("", MainView.as_view()), path("", MainView.as_view()),
path("admin/", admin.site.urls), path("admin/", admin.site.urls),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

View File

@ -1,4 +1,4 @@
from os import listdir, getcwd from os import listdir
from SprintLib.testers.BaseTester import BaseTester, TestException from SprintLib.testers.BaseTester import BaseTester, TestException
@ -7,13 +7,11 @@ class Python3Tester(BaseTester):
file = None file = None
def before_test(self): def before_test(self):
print(getcwd())
for file in listdir(self.solution.testing_directory): for file in listdir(self.solution.testing_directory):
if file.endswith(".py"): if file.endswith(".py"):
self.file = file self.file = file
break break
if self.file is None: if self.file is None:
print('no file')
raise TestException("TE") raise TestException("TE")
@property @property