diff --git a/atdb/taskdatabase/migrations/0003_auto_20210301_1206.py b/atdb/taskdatabase/migrations/0003_auto_20210301_1206.py new file mode 100644 index 0000000000000000000000000000000000000000..0f80b7c18c49eb521402ddb4352a67ef659af675 --- /dev/null +++ b/atdb/taskdatabase/migrations/0003_auto_20210301_1206.py @@ -0,0 +1,26 @@ +# Generated by Django 3.1.4 on 2021-03-01 11:06 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('taskdatabase', '0002_auto_20210225_0715'), + ] + + operations = [ + migrations.CreateModel( + name='Configuration', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('key', models.CharField(max_length=50)), + ('value', models.CharField(max_length=255)), + ], + ), + migrations.AlterField( + model_name='task', + name='priority', + field=models.IntegerField(default=100, null=True), + ), + ] diff --git a/atdb/taskdatabase/models.py b/atdb/taskdatabase/models.py index a5ff93e768c5f8ee6137507247a2dc11f167d8a5..3cc13d894c8c299206a6f9c8c17fb98be74c873b 100644 --- a/atdb/taskdatabase/models.py +++ b/atdb/taskdatabase/models.py @@ -85,3 +85,11 @@ class Status(models.Model): formatedDate = self.timestamp.strftime(datetime_format_string) return str(self.name)+' ('+str(formatedDate)+')' + +class Configuration(models.Model): + key = models.CharField(max_length=50) + value = models.CharField(max_length=255) + + # the representation of the value in the REST API + def __str__(self): + return str(self.key) \ No newline at end of file diff --git a/atdb/taskdatabase/serializers.py b/atdb/taskdatabase/serializers.py index 1710ee3780aa4056f4a8f3190d2126a6ee0792bb..30762cd46b840887fe2dddae531b6f7839bfc4ba 100644 --- a/atdb/taskdatabase/serializers.py +++ b/atdb/taskdatabase/serializers.py @@ -1,17 +1,10 @@ from rest_framework import serializers -from .models import Status, Task, Workflow, LogEntry +from .models import Status, Task, Workflow, LogEntry, Configuration class WorkflowSerializer(serializers.ModelSerializer): -# tasks = serializers.StringRelatedField( -# many=True, -# required=False, -# ) - - #workflow = WorkflowSerializer() - class Meta: model = Workflow fields = "__all__" @@ -124,3 +117,8 @@ class WorkflowSerializer(serializers.ModelSerializer): fields = "__all__" +class ConfigurationSerializer(serializers.ModelSerializer): + + class Meta: + model = Configuration + fields = "__all__" diff --git a/atdb/taskdatabase/templates/taskdatabase/index.html b/atdb/taskdatabase/templates/taskdatabase/index.html index df1a701a646a6ac3861741d02ef0992c293a401f..46373d7ca397259b1461e93b77dba6de081a2f62 100644 --- a/atdb/taskdatabase/templates/taskdatabase/index.html +++ b/atdb/taskdatabase/templates/taskdatabase/index.html @@ -45,7 +45,7 @@ </div> {% include 'taskdatabase/pagination.html' %} </div> - <p class="footer"> Version 1.0.0 (1 mar 2021 - 11:00) + <p class="footer"> Version 1.0.0 (1 mar 2021 - 13:00) <script type="text/javascript"> (function(seconds) { var refresh, diff --git a/atdb/taskdatabase/urls.py b/atdb/taskdatabase/urls.py index c5af49de311f2817f3370bf64fba7cd83be4853a..0fb0d6e5aca7e8c0155149720f2dd8679f829ac3 100644 --- a/atdb/taskdatabase/urls.py +++ b/atdb/taskdatabase/urls.py @@ -17,6 +17,10 @@ urlpatterns = [ path('logentries/', views.LogEntryListViewAPI.as_view()), path('logentries/<int:pk>/', views.LogEntryDetailsViewAPI.as_view(), name='logentry-detail-view-api'), + path('configuration/', views.ConfigurationListViewAPI.as_view()), + path('configuration/<int:pk>/', views.ConfigurationDetailsViewAPI.as_view(), name='configuration-detail-view-api'), + + # --- custom requests --- # /atdb/get_size?status__in=defined,staged path('tasks/get_size', diff --git a/atdb/taskdatabase/views.py b/atdb/taskdatabase/views.py index 5acba9afc56067deaa1003e0dc44e2ae20e2f8ec..a36f049fe2a2fa5ac5e78cd04970825cce8783d9 100644 --- a/atdb/taskdatabase/views.py +++ b/atdb/taskdatabase/views.py @@ -12,10 +12,14 @@ from django_filters import rest_framework as filters from django.shortcuts import render, redirect from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger -from .models import Task, Status, Workflow, LogEntry +from .models import Task, Status, Workflow, LogEntry, Configuration from django.db.models import Q -from .serializers import TaskWriteSerializer, TaskReadSerializer, WorkflowSerializer, LogEntrySerializer -from .forms import FilterForm +from .serializers import \ + TaskWriteSerializer, \ + TaskReadSerializer, \ + WorkflowSerializer,\ + LogEntrySerializer,\ + ConfigurationSerializer from .services import algorithms @@ -55,7 +59,16 @@ class LogEntryFilter(filters.FilterSet): model = LogEntry fields = { - 'step_name': ['exact', 'icontains'], + 'step_name': ['exact', 'icontains', 'in', 'startswith'], + } + +class ConfigurationFilter(filters.FilterSet): + + class Meta: + model = Configuration + + fields = { + 'key': ['exact', 'icontains'], } # ---------- GUI Views ----------- @@ -212,6 +225,24 @@ class LogEntryDetailsViewAPI(generics.RetrieveUpdateDestroyAPIView): task.new_status = log_entry.status task.save() + +# example: /atdb/configuration/ +class ConfigurationListViewAPI(generics.ListCreateAPIView): + model = Configuration + queryset = Configuration.objects.all() + serializer_class = ConfigurationSerializer + + filter_backends = (filters.DjangoFilterBackend,) + filter_class = ConfigurationFilter + + +# example: /atdb/configuration/5/ +class ConfigurationDetailsViewAPI(generics.RetrieveUpdateDestroyAPIView): + model = Configuration + queryset = Configuration.objects.all() + serializer_class = ConfigurationSerializer + + # --- controller resources, triggered by a button in the GUI or directoy with a URL --- # set task status to 'new_status' - called from the GUI