diff --git a/docker-compose.yml b/docker-compose.yml index d1e9b793..26e81a83 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -14,4 +14,3 @@ services: depends_on: - scidash-redis - scidash-postgres - diff --git a/scidash/account/auth.py b/scidash/account/auth.py index f109dfa7..662a80e1 100644 --- a/scidash/account/auth.py +++ b/scidash/account/auth.py @@ -1,4 +1,5 @@ -from rest_framework.authentication import SessionAuthentication, BasicAuthentication +from rest_framework.authentication import SessionAuthentication + class CsrfExemptSessionAuthentication(SessionAuthentication): diff --git a/scidash/sciunitmodels/api/views.py b/scidash/sciunitmodels/api/views.py index 60de16d3..67cb550f 100644 --- a/scidash/sciunitmodels/api/views.py +++ b/scidash/sciunitmodels/api/views.py @@ -1,15 +1,12 @@ from rest_framework import permissions, viewsets -from scidash.sciunitmodels.models import Capability, ModelClass, ModelInstance - from scidash.sciunitmodels.filters import ModelInstanceFilter - +from scidash.sciunitmodels.models import Capability, ModelClass, ModelInstance from scidash.sciunitmodels.serializers import ( CapabilitySerializer, ModelClassSerializer, ModelInstanceSerializer ) - class CapabilityViewSet(viewsets.ReadOnlyModelViewSet): queryset = Capability.objects.all() serializer_class = CapabilitySerializer diff --git a/scidash/sciunitmodels/filters.py b/scidash/sciunitmodels/filters.py index b60ebb2d..eb59d620 100644 --- a/scidash/sciunitmodels/filters.py +++ b/scidash/sciunitmodels/filters.py @@ -1,4 +1,3 @@ -from django.db.models import Count, Subquery, Q from django_filters import rest_framework as filters import scidash.sciunitmodels.models as models @@ -6,31 +5,25 @@ class ModelInstanceFilter(filters.FilterSet): class_name = filters.CharFilter( - name='model_class__class_name', - lookup_expr='icontains' + name='model_class__class_name', lookup_expr='icontains' ) - tags = filters.CharFilter( - name='tags__name', - lookup_expr='icontains' - ) + tags = filters.CharFilter(name='tags__name', lookup_expr='icontains') name = filters.CharFilter(name='name', lookup_expr='icontains') owner = filters.CharFilter(name='owner__username', lookup_expr='icontains') - timestamp_from = filters.IsoDateTimeFilter(name='timestamp', - lookup_expr='gte') + timestamp_from = filters.IsoDateTimeFilter( + name='timestamp', lookup_expr='gte' + ) - timestamp_to = filters.IsoDateTimeFilter(name='timestamp', - lookup_expr='lte') + timestamp_to = filters.IsoDateTimeFilter( + name='timestamp', lookup_expr='lte' + ) class Meta: model = models.ModelInstance fields = [ - 'name', - 'class_name', - 'tags', - 'timestamp_from', - 'timestamp_to' + 'name', 'class_name', 'tags', 'timestamp_from', 'timestamp_to' ] diff --git a/scidash/sciunitmodels/migrations/0010_auto_20190131_1330.py b/scidash/sciunitmodels/migrations/0010_auto_20190131_1330.py new file mode 100644 index 00000000..de4c8b1e --- /dev/null +++ b/scidash/sciunitmodels/migrations/0010_auto_20190131_1330.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.7 on 2019-01-31 13:30 +from __future__ import unicode_literals + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sciunitmodels', '0009_modelinstance_owner'), + ] + + operations = [ + migrations.AlterField( + model_name='modelinstance', + name='timestamp', + field=models.DateField(default=datetime.date.today), + ), + ] diff --git a/scidash/sciunitmodels/migrations/0011_auto_20190131_1333.py b/scidash/sciunitmodels/migrations/0011_auto_20190131_1333.py new file mode 100644 index 00000000..06ccef26 --- /dev/null +++ b/scidash/sciunitmodels/migrations/0011_auto_20190131_1333.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.7 on 2019-01-31 13:33 +from __future__ import unicode_literals + +import django.contrib.postgres.fields.jsonb +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('sciunitmodels', '0010_auto_20190131_1330'), + ] + + operations = [ + migrations.AlterField( + model_name='modelinstance', + name='attributes', + field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, null=True), + ), + ] diff --git a/scidash/sciunitmodels/models.py b/scidash/sciunitmodels/models.py index 59eb7ad1..6ce2dd1b 100644 --- a/scidash/sciunitmodels/models.py +++ b/scidash/sciunitmodels/models.py @@ -36,7 +36,7 @@ def __str__(self): class ModelInstance(models.Model): model_class = models.ForeignKey(ModelClass) backend = models.CharField(max_length=200, null=True, blank=True) - attributes = JSONField() + attributes = JSONField(blank=True, null=True) name = models.CharField(max_length=50) run_params = HStoreField(blank=True, null=True) owner = models.ForeignKey(general_models.ScidashUser, null=True) diff --git a/scidash/sciunittests/api/views.py b/scidash/sciunittests/api/views.py index 537212f0..0b549776 100644 --- a/scidash/sciunittests/api/views.py +++ b/scidash/sciunittests/api/views.py @@ -19,10 +19,10 @@ class ScoreViewSet(viewsets.ReadOnlyModelViewSet): filter_class = ScoreFilter -class TestInstanceViewSet(viewsets.ReadOnlyModelViewSet): +class TestInstanceViewSet(viewsets.ModelViewSet): queryset = TestInstance.objects.all() serializer_class = TestInstanceSerializer - permission_classes = (permissions.AllowAny, ) + permission_classes = (permissions.IsAuthenticatedOrReadOnly, ) filter_class = TestInstanceFilter diff --git a/scidash/sciunittests/filters.py b/scidash/sciunittests/filters.py index 3f22c805..cf1882e3 100644 --- a/scidash/sciunittests/filters.py +++ b/scidash/sciunittests/filters.py @@ -6,34 +6,29 @@ class TestInstanceFilter(filters.FilterSet): class_name = filters.CharFilter( - name='test_class__class_name', - lookup_expr='icontains' + name='test_class__class_name', lookup_expr='icontains' ) - tags = filters.CharFilter( - name='tags__name', - lookup_expr='icontains' - ) + tags = filters.CharFilter(name='tags__name', lookup_expr='icontains') owner = filters.CharFilter(name='owner__username', lookup_expr='icontains') - name = filters.CharFilter(name='test_class__class_name', - lookup_expr='icontains') + name = filters.CharFilter( + name='test_class__class_name', lookup_expr='icontains' + ) - timestamp_from = filters.IsoDateTimeFilter(name='timestamp', - lookup_expr='gte') + timestamp_from = filters.IsoDateTimeFilter( + name='timestamp', lookup_expr='gte' + ) - timestamp_to = filters.IsoDateTimeFilter(name='timestamp', - lookup_expr='lte') + timestamp_to = filters.IsoDateTimeFilter( + name='timestamp', lookup_expr='lte' + ) class Meta: model = TestInstance fields = [ - 'name', - 'class_name', - 'tags', - 'timestamp_from', - 'timestamp_to' + 'name', 'class_name', 'tags', 'timestamp_from', 'timestamp_to' ] diff --git a/scidash/sciunittests/migrations/0023_auto_20190131_1330.py b/scidash/sciunittests/migrations/0023_auto_20190131_1330.py new file mode 100644 index 00000000..65936a42 --- /dev/null +++ b/scidash/sciunittests/migrations/0023_auto_20190131_1330.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.7 on 2019-01-31 13:30 +from __future__ import unicode_literals + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sciunittests', '0022_testinstance_owner'), + ] + + operations = [ + migrations.AlterField( + model_name='scoreinstance', + name='timestamp', + field=models.DateField(default=datetime.date.today), + ), + migrations.AlterField( + model_name='testinstance', + name='timestamp', + field=models.DateField(default=datetime.date.today), + ), + migrations.AlterField( + model_name='testsuite', + name='timestamp', + field=models.DateField(default=datetime.date.today), + ), + ] diff --git a/scidash/sciunittests/migrations/0024_auto_20190131_1530.py b/scidash/sciunittests/migrations/0024_auto_20190131_1530.py new file mode 100644 index 00000000..c9d4d853 --- /dev/null +++ b/scidash/sciunittests/migrations/0024_auto_20190131_1530.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.7 on 2019-01-31 15:30 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sciunittests', '0023_auto_20190131_1330'), + ] + + operations = [ + migrations.AlterField( + model_name='testinstance', + name='test_suites', + field=models.ManyToManyField(blank=True, null=True, related_name='tests', to='sciunittests.TestSuite'), + ), + ] diff --git a/scidash/sciunittests/migrations/0025_testinstance_name.py b/scidash/sciunittests/migrations/0025_testinstance_name.py new file mode 100644 index 00000000..37b7773c --- /dev/null +++ b/scidash/sciunittests/migrations/0025_testinstance_name.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.7 on 2019-01-31 15:45 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sciunittests', '0024_auto_20190131_1530'), + ] + + operations = [ + migrations.AddField( + model_name='testinstance', + name='name', + field=models.CharField(default='Default Name', max_length=200), + ), + ] diff --git a/scidash/sciunittests/models.py b/scidash/sciunittests/models.py index 80b5bbff..fb0caf58 100644 --- a/scidash/sciunittests/models.py +++ b/scidash/sciunittests/models.py @@ -38,9 +38,10 @@ def __str__(self): class TestInstance(models.Model): + name = models.CharField(max_length=200, default='Default Name') test_class = models.ForeignKey(TestClass) observation = JSONField() - test_suites = models.ManyToManyField(TestSuite, related_name='tests') + test_suites = models.ManyToManyField(TestSuite, related_name='tests', blank=True) description = models.TextField(blank=True, null=True) owner = models.ForeignKey(general_models.ScidashUser, null=True) verbose = models.IntegerField(default=0) diff --git a/scidash/sciunittests/serializers.py b/scidash/sciunittests/serializers.py index ee15a146..4235465c 100644 --- a/scidash/sciunittests/serializers.py +++ b/scidash/sciunittests/serializers.py @@ -39,7 +39,7 @@ class Meta: class TestInstanceSerializer( GetByKeyOrCreateMixin, WritableNestedModelSerializer, CachedSerializerMixin ): - test_suites = TestSuiteSerializer(many=True) + test_suites = TestSuiteSerializer(many=True, required=False) test_class = TestClassSerializer() hash_id = serializers.CharField(validators=[]) tags = TagSerializer(many=True, required=False)