From 4205cddf9b7f5ef212062215246deb3edbb6b107 Mon Sep 17 00:00:00 2001 From: AlexP077 Date: Thu, 24 Aug 2023 21:02:50 +0300 Subject: [PATCH] run_ml_for_pvz --- service/admin.py | 3 ++- service/migrations/0027_postmlchecker.py | 21 +++++++++++++++++++++ service/models.py | 5 +++++ service/signals.py | 15 ++++++++++++++- 4 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 service/migrations/0027_postmlchecker.py diff --git a/service/admin.py b/service/admin.py index 9465df2..50e4bc5 100644 --- a/service/admin.py +++ b/service/admin.py @@ -79,7 +79,8 @@ class GroupAdmin(admin.ModelAdmin): class PostPvzGroupAdmin(GroupAdmin): def save_model(self, request, obj, form, change): - run_psql_command() + if not obj.pk: + run_psql_command() super().save_model(request, obj, form, change) diff --git a/service/migrations/0027_postmlchecker.py b/service/migrations/0027_postmlchecker.py new file mode 100644 index 0000000..8abf586 --- /dev/null +++ b/service/migrations/0027_postmlchecker.py @@ -0,0 +1,21 @@ +# Generated by Django 3.2 on 2023-08-24 17:29 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('service', '0026_auto_20230823_2016'), + ] + + operations = [ + migrations.CreateModel( + name='PostMLChecker', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('current', models.IntegerField(default=0)), + ('target', models.IntegerField()), + ], + ), + ] diff --git a/service/models.py b/service/models.py index 4bfb7dc..d256575 100644 --- a/service/models.py +++ b/service/models.py @@ -215,3 +215,8 @@ class LastMLCall(models.Model): class TempFiles(models.Model): data = models.TextField(blank=False, null=False) + + +class PostMLChecker(models.Model): + current = models.IntegerField(default=0,blank=False, null=False) + target = models.IntegerField(blank=False, null=False) \ No newline at end of file diff --git a/service/signals.py b/service/signals.py index f8ac95b..5c67b42 100644 --- a/service/signals.py +++ b/service/signals.py @@ -3,9 +3,10 @@ from rest_registration.signals import user_registered from service.layer_service import LayerService from service.models import Post_and_pvz, Post_and_pvzGroup, Post_and_pvzCategory, OtherObjects, OtherObjectsGroup, \ - OtherObjectsCategory + OtherObjectsCategory, PostMLChecker from django.db.models.signals import post_save from django.dispatch import receiver +from service.tasks import raschet def user_created(sender, user, request, **kwargs): @@ -20,11 +21,22 @@ user_registered.connect(user_created) @receiver(post_save, sender=Post_and_pvz) def post_pvz_handler(sender, instance, **kwargs): LayerService().count_post_pvz_for_placementpoint(instance) + checker = PostMLChecker.objects.first() + if not checker: + raschet.delay() + else: + if checker.current >= checker.target - 1: + raschet.delay() + PostMLChecker.objects.all().delete() + else: + checker.current += 1 + checker.save() @receiver(post_save, sender=Post_and_pvzGroup) def post_group_handler(sender, instance, **kwargs): objects = Post_and_pvz.objects.filter(group=instance) + PostMLChecker.objects.create(target=objects.count()) for obj in objects: obj.include_in_ml = instance.include_in_ml obj.visible = instance.visible @@ -34,6 +46,7 @@ def post_group_handler(sender, instance, **kwargs): @receiver(post_save, sender=Post_and_pvzCategory) def post_category_handler(sender, instance, **kwargs): objects = Post_and_pvzGroup.objects.filter(category=instance) + PostMLChecker.objects.create(target=Post_and_pvz.objects.filter(category=instance).count()) for obj in objects: obj.include_in_ml = instance.include_in_ml obj.visible = instance.visible