From 28b85efc501f0aea8decf97ed7eb1500071f8090 Mon Sep 17 00:00:00 2001 From: Roman Date: Fri, 5 Jul 2019 16:47:15 +0300 Subject: [PATCH 1/3] If there is no import path, model_instance became locked --- scidash/sciunitmodels/api/views.py | 11 +++++++++++ scidash/sciunittests/models.py | 4 +++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/scidash/sciunitmodels/api/views.py b/scidash/sciunitmodels/api/views.py index 74e4ebfd..5fad190d 100644 --- a/scidash/sciunitmodels/api/views.py +++ b/scidash/sciunitmodels/api/views.py @@ -36,6 +36,17 @@ class ModelInstanceViewSet(viewsets.ModelViewSet): permission_classes = (permissions.IsAuthenticatedOrReadOnly, ) filter_class = ModelInstanceFilter + def filter_queryset(self, queryset): + queryset.filter(model_class__import_path='').update( + status=ModelInstance.LOCKED + ) + + queryset.filter( + Q(score__isnull=True) & ~Q(model_class__import_path='') + ).update(status=ModelInstance.AVAILABLE) + + return queryset + class ModelParametersView(views.APIView): def get(self, request): diff --git a/scidash/sciunittests/models.py b/scidash/sciunittests/models.py index 640fa4c4..c1c79745 100644 --- a/scidash/sciunittests/models.py +++ b/scidash/sciunittests/models.py @@ -178,7 +178,9 @@ class ScoreInstance(models.Model): max_length=200, default='', null=True, blank=True ) score_class = models.ForeignKey(ScoreClass, null=True, blank=True) - model_instance = models.ForeignKey(sciunitmodels.models.ModelInstance) + model_instance = models.ForeignKey( + sciunitmodels.models.ModelInstance, related_name='score' + ) test_instance = models.ForeignKey(TestInstance) score = models.FloatField(default=0, null=True, blank=True) sort_key = models.FloatField(default=0) From d3cac0ca6de8f3af477968a6cfed753d56b95c04 Mon Sep 17 00:00:00 2001 From: Roman Date: Mon, 8 Jul 2019 15:17:45 +0300 Subject: [PATCH 2/3] Adding tag for no_import_path classes and instances --- scidash/general/admin.py | 3 ++- scidash/main/settings.py | 2 ++ scidash/sciunitmodels/api/views.py | 25 ++++++++++++++++++++++-- scidash/sciunittests/api/views.py | 31 ++++++++++++++++++++++++++++++ scidash/sciunittests/models.py | 2 +- 5 files changed, 59 insertions(+), 4 deletions(-) diff --git a/scidash/general/admin.py b/scidash/general/admin.py index 13ded1e7..f73fb977 100644 --- a/scidash/general/admin.py +++ b/scidash/general/admin.py @@ -2,9 +2,10 @@ from django.contrib.auth.admin import UserAdmin from django.contrib.contenttypes.models import ContentType -from scidash.general.models import ScidashUser +from scidash.general.models import ScidashUser, Tag # Register your models here. admin.site.register(ScidashUser, UserAdmin) admin.site.register(ContentType) +admin.site.register(Tag) diff --git a/scidash/main/settings.py b/scidash/main/settings.py index f5eaf596..49724447 100644 --- a/scidash/main/settings.py +++ b/scidash/main/settings.py @@ -240,3 +240,5 @@ ) CELERY_RESULT_BACKEND = 'django-db' + +NO_IMPORT_TAG = 'no import path' diff --git a/scidash/sciunitmodels/api/views.py b/scidash/sciunitmodels/api/views.py index 5fad190d..f7d2b938 100644 --- a/scidash/sciunitmodels/api/views.py +++ b/scidash/sciunitmodels/api/views.py @@ -5,11 +5,14 @@ from rest_framework import permissions, response, views, viewsets from django.db.models import Q +from django.conf import settings as s +from django.contrib.contenttypes.models import ContentType import scidash.sciunitmodels.helpers as hlp from scidash.sciunitmodels.filters import ModelClassFilter, ModelInstanceFilter from scidash.sciunitmodels.models import Capability, ModelClass, ModelInstance from pygeppetto_gateway.interpreters.helpers import URLProcessor +from scidash.general.models import Tag from scidash.sciunitmodels.serializers import ( CapabilitySerializer, ModelClassSerializer, ModelInstanceSerializer ) @@ -37,14 +40,32 @@ class ModelInstanceViewSet(viewsets.ModelViewSet): filter_class = ModelInstanceFilter def filter_queryset(self, queryset): - queryset.filter(model_class__import_path='').update( + model_instance_content_type = ContentType.objects.get_for_model( + ModelInstance + ) + + ModelInstance.objects.filter(model_class__import_path='').update( status=ModelInstance.LOCKED ) - queryset.filter( + for instance in ModelInstance.objects.filter( + model_class__import_path='' + ): + Tag.objects.get_or_create( + name=s.NO_IMPORT_TAG, + content_type=model_instance_content_type, + object_id=instance.pk + ) + + ModelInstance.objects.filter( Q(score__isnull=True) & ~Q(model_class__import_path='') ).update(status=ModelInstance.AVAILABLE) + for instance in ModelInstance.objects.filter( + ~Q(model_class__import_path='') + ): + instance.tags.filter(name=s.NO_IMPORT_TAG).delete() + return queryset diff --git a/scidash/sciunittests/api/views.py b/scidash/sciunittests/api/views.py index 323dfaaf..52c0664e 100644 --- a/scidash/sciunittests/api/views.py +++ b/scidash/sciunittests/api/views.py @@ -4,6 +4,8 @@ from rest_framework import permissions, response, views, viewsets from django.db.models import Q +from django.conf import settings as s +from django.contrib.contenttypes.models import ContentType from scidash.general.models import Tag from scidash.sciunittests.filters import ( @@ -31,6 +33,35 @@ class TestInstanceViewSet(viewsets.ModelViewSet): permission_classes = (permissions.IsAuthenticatedOrReadOnly, ) filter_class = TestInstanceFilter + def filter_queryset(self, queryset): + test_instance_content_type = ContentType.objects.get_for_model( + TestInstance + ) + + TestInstance.objects.filter(test_class__import_path='').update( + status=TestInstance.LOCKED + ) + + for instance in TestInstance.objects.filter( + test_class__import_path='' + ): + Tag.objects.get_or_create( + name=s.NO_IMPORT_TAG, + content_type=test_instance_content_type, + object_id=instance.pk + ) + + TestInstance.objects.filter( + Q(score__isnull=True) & ~Q(test_class__import_path='') + ).update(status=TestInstance.AVAILABLE) + + for instance in TestInstance.objects.filter( + ~Q(test_class__import_path='') + ): + instance.tags.filter(name=s.NO_IMPORT_TAG).delete() + + return queryset + class TestSuiteViewSet(viewsets.ReadOnlyModelViewSet): queryset = TestSuite.objects.all() diff --git a/scidash/sciunittests/models.py b/scidash/sciunittests/models.py index c1c79745..3c0450ba 100644 --- a/scidash/sciunittests/models.py +++ b/scidash/sciunittests/models.py @@ -181,7 +181,7 @@ class ScoreInstance(models.Model): model_instance = models.ForeignKey( sciunitmodels.models.ModelInstance, related_name='score' ) - test_instance = models.ForeignKey(TestInstance) + test_instance = models.ForeignKey(TestInstance, related_name='score') score = models.FloatField(default=0, null=True, blank=True) sort_key = models.FloatField(default=0) prediction_numeric = models.FloatField(default=None, null=True, blank=True) From d116707d2922f318ca8913e5b08bb4e7e4818b8f Mon Sep 17 00:00:00 2001 From: Roman Date: Tue, 9 Jul 2019 17:29:31 +0300 Subject: [PATCH 3/3] Changing tag name --- scidash/main/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scidash/main/settings.py b/scidash/main/settings.py index 49724447..40d567a0 100644 --- a/scidash/main/settings.py +++ b/scidash/main/settings.py @@ -241,4 +241,4 @@ CELERY_RESULT_BACKEND = 'django-db' -NO_IMPORT_TAG = 'no import path' +NO_IMPORT_TAG = 'unschedulable'