diff --git a/Main/management/commands/apply_languages.py b/Main/management/commands/apply_languages.py new file mode 100644 index 0000000..caf105c --- /dev/null +++ b/Main/management/commands/apply_languages.py @@ -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() diff --git a/Main/migrations/0019_set_auto_add_new_languages.py b/Main/migrations/0019_set_auto_add_new_languages.py new file mode 100644 index 0000000..5d64e8b --- /dev/null +++ b/Main/migrations/0019_set_auto_add_new_languages.py @@ -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), + ), + ] diff --git a/Main/migrations/0020_languageapply.py b/Main/migrations/0020_languageapply.py new file mode 100644 index 0000000..2057236 --- /dev/null +++ b/Main/migrations/0020_languageapply.py @@ -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)), + ], + ), + ] diff --git a/Main/models/__init__.py b/Main/models/__init__.py index 53191ee..a382dff 100644 --- a/Main/models/__init__.py +++ b/Main/models/__init__.py @@ -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 diff --git a/Main/models/language_apply.py b/Main/models/language_apply.py new file mode 100644 index 0000000..d1e36d5 --- /dev/null +++ b/Main/models/language_apply.py @@ -0,0 +1,6 @@ +from django.db import models + + +class LanguageApply(models.Model): + language_id = models.IntegerField() + applied = models.BooleanField(default=False) diff --git a/Main/models/set.py b/Main/models/set.py index aaac318..1c0b1b3 100644 --- a/Main/models/set.py +++ b/Main/models/set.py @@ -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 diff --git a/Main/views/SetSettingsView.py b/Main/views/SetSettingsView.py index 3cacc10..d4a47cb 100644 --- a/Main/views/SetSettingsView.py +++ b/Main/views/SetSettingsView.py @@ -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]) diff --git a/docker-compose.yaml b/docker-compose.yaml index 6992851..a27bd24 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -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 diff --git a/templates/set_settings.html b/templates/set_settings.html index ce45f36..1308289 100644 --- a/templates/set_settings.html +++ b/templates/set_settings.html @@ -144,6 +144,7 @@