apply languages

This commit is contained in:
Egor Matveev 2022-02-12 00:18:13 +03:00
parent 8cb402d4af
commit a3eec7c864
9 changed files with 78 additions and 0 deletions

View File

@ -0,0 +1,20 @@
from django.core.management.base import BaseCommand
from Main.models import LanguageApply, Set
from SprintLib.language import languages
class Command(BaseCommand):
help = "starts FileStorage"
def handle(self, *args, **options):
for language in languages:
apply = LanguageApply.objects.filter(language_id=language.id, applied=True).first()
if apply is None:
for s in Set.objects.filter(auto_add_new_languages=True):
if language.id not in s.languages:
s.languages.append(language.id)
s.save()
obj, _ = LanguageApply.objects.get_or_create(language_id=language.id)
obj.applied = True
obj.save()

View File

@ -0,0 +1,18 @@
# Generated by Django 3.2.4 on 2022-02-11 21:03
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('Main', '0018_set_languages'),
]
operations = [
migrations.AddField(
model_name='set',
name='auto_add_new_languages',
field=models.BooleanField(default=True),
),
]

View File

@ -0,0 +1,21 @@
# Generated by Django 3.2.4 on 2022-02-11 21:13
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('Main', '0019_set_auto_add_new_languages'),
]
operations = [
migrations.CreateModel(
name='LanguageApply',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('language_id', models.IntegerField()),
('applied', models.BooleanField(default=False)),
],
),
]

View File

@ -11,3 +11,4 @@ from Main.models.solution_file import SolutionFile
from Main.models.friendship import Friendship
from Main.models.chat import Chat
from Main.models.message import Message
from Main.models.language_apply import LanguageApply

View File

@ -0,0 +1,6 @@
from django.db import models
class LanguageApply(models.Model):
language_id = models.IntegerField()
applied = models.BooleanField(default=False)

View File

@ -19,6 +19,7 @@ class Set(models.Model):
end_time = models.DateTimeField(default=None, null=True)
editors = ArrayField(models.TextField(), default=list)
languages = ArrayField(models.IntegerField(), default=list)
auto_add_new_languages = models.BooleanField(default=True)
description = models.TextField(default='')
@property

View File

@ -103,6 +103,7 @@ class SetSettingsView(BaseView):
def post_languages_edit(self):
current_languages = self.entities.set.languages
self.entities.set.auto_add_new_languages = 'auto_add' in self.request.POST
for key, value in self.request.POST.items():
if key.startswith("language_"):
i = int(key.split("_")[1])

View File

@ -81,6 +81,14 @@ services:
- /sprint-data/solutions:/usr/src/app/solutions
- /var/run/docker.sock:/var/run/docker.sock
apply-languages:
image: mathwave/sprint-repo:sprint
command: ./manage.py apply_languages
depends_on:
- migrations
- web
- postgres
notify-admin:
image: mathwave/sprint-repo:sprint
command: ./manage.py success_deploy
@ -92,3 +100,4 @@ services:
- rabbitmq
- bot
- postgres
- apply-languages

View File

@ -144,6 +144,7 @@
<div class="col-12">
{% csrf_token %}
<input type="hidden" name="action" value="languages_edit">
<input type="checkbox" name="auto_add" {% if set.auto_add_new_languages %}checked{% endif %}> Обновлять список при добавлении нового языка<br>
{% for language in languages %}
<input type="checkbox" {% if language.id in set.languages %}checked{% endif %} name="language_{{ language.id }}"> <img src="{{ language.logo_url }}" height="24px" width="24px"> {{ language.name }}<br>
{% endfor %}