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.friendship import Friendship
from Main.models.chat import Chat from Main.models.chat import Chat
from Main.models.message import Message 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) end_time = models.DateTimeField(default=None, null=True)
editors = ArrayField(models.TextField(), default=list) editors = ArrayField(models.TextField(), default=list)
languages = ArrayField(models.IntegerField(), default=list) languages = ArrayField(models.IntegerField(), default=list)
auto_add_new_languages = models.BooleanField(default=True)
description = models.TextField(default='') description = models.TextField(default='')
@property @property

View File

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

View File

@ -81,6 +81,14 @@ services:
- /sprint-data/solutions:/usr/src/app/solutions - /sprint-data/solutions:/usr/src/app/solutions
- /var/run/docker.sock:/var/run/docker.sock - /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: notify-admin:
image: mathwave/sprint-repo:sprint image: mathwave/sprint-repo:sprint
command: ./manage.py success_deploy command: ./manage.py success_deploy
@ -92,3 +100,4 @@ services:
- rabbitmq - rabbitmq
- bot - bot
- postgres - postgres
- apply-languages

View File

@ -144,6 +144,7 @@
<div class="col-12"> <div class="col-12">
{% csrf_token %} {% csrf_token %}
<input type="hidden" name="action" value="languages_edit"> <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 %} {% 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> <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 %} {% endfor %}