Skip to content
Snippets Groups Projects
Commit 781cfff3 authored by Mattia Mancini's avatar Mattia Mancini
Browse files

Add view

parent 1c140910
No related branches found
No related tags found
3 merge requests!176Master,!175Master,!174Add unique aggregation key endpoint
......@@ -554,3 +554,8 @@ def construct_dashboard_html(request, selection):
results_logs = construct_logs_per_workflow_html(request, log_records)
return results_tasks, results_logs
def unique_values_for_aggregation_key(queryset, aggregation_key):
return list(map(lambda x: x[aggregation_key], queryset.values(aggregation_key).distinct()))
\ No newline at end of file
import logging
import json
......@@ -20,6 +19,7 @@ from django_tables2 import SingleTableView
from django.shortcuts import render, redirect
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from rest_framework.request import Request
from django.conf import settings
from .models import Task, Status, Workflow, LogEntry, Configuration, Job, PostProcessingRule, Monitor
......@@ -41,9 +41,9 @@ from .services import algorithms
logger = logging.getLogger(__name__)
# ---------- filters (in the REST API) ---------
class TaskFilter(filters.FilterSet):
class Meta:
model = Task
......@@ -63,6 +63,7 @@ class TaskFilter(filters.FilterSet):
'predecessor__status': ['exact', 'icontains', 'in', 'startswith'],
}
class TaskFilterQueryPage(filters.FilterSet):
resume = django_filters.BooleanFilter(lookup_expr='exact', label='resuming')
......@@ -83,7 +84,6 @@ class TaskFilterQueryPage(filters.FilterSet):
class WorkflowFilter(filters.FilterSet):
class Meta:
model = Workflow
......@@ -95,7 +95,6 @@ class WorkflowFilter(filters.FilterSet):
class LogEntryFilter(filters.FilterSet):
class Meta:
model = LogEntry
......@@ -105,8 +104,8 @@ class LogEntryFilter(filters.FilterSet):
'status': ['exact', 'in'],
}
class ConfigurationFilter(filters.FilterSet):
class ConfigurationFilter(filters.FilterSet):
class Meta:
model = Configuration
......@@ -116,8 +115,8 @@ class ConfigurationFilter(filters.FilterSet):
'value': ['exact', 'icontains'],
}
class JobFilter(filters.FilterSet):
class JobFilter(filters.FilterSet):
class Meta:
model = Job
......@@ -127,8 +126,8 @@ class JobFilter(filters.FilterSet):
'job_id': ['exact'],
}
class PostProcessingFilter(filters.FilterSet):
class PostProcessingFilter(filters.FilterSet):
class Meta:
model = PostProcessingRule
......@@ -139,6 +138,7 @@ class PostProcessingFilter(filters.FilterSet):
'workflow_to_apply__id': ['exact'],
}
# ---------- Tables2 Views (experimental) -----------
# implementation with tables2: http://localhost:8000/atdb/tables2
class QueryView(SingleTableMixin, FilterView):
......@@ -146,7 +146,7 @@ class QueryView(SingleTableMixin, FilterView):
model = Task
queryset = Task.objects.filter(task_type='regular')
template_name = "query/index.html"
filterset_class = TaskFilterQueryPage
filterset_class = TaskFilter
def get_table_data(self):
......@@ -254,7 +254,6 @@ class TaskTables2View(SingleTableView):
def TaskDetails(request, id=0, page=0):
try:
task = Task.objects.get(id=id)
......@@ -280,8 +279,6 @@ def TaskDetails(request, id=0, page=0):
return render(request, "taskdatabase/tasks/task_details.html", {'task': task, 'logentries': logentries_html})
def ShowInputs(request, id):
task = Task.objects.get(id=id)
......@@ -336,6 +333,7 @@ class DiagramView(ListView):
model = Task
template_name = "taskdatabase/diagram.html"
# ---------- REST API views -----------
# example: /atdb/tasks/
......@@ -359,6 +357,7 @@ class TaskListViewAPI(generics.ListCreateAPIView):
else:
return TaskWriteSerializer
class PostProcessingTaskListViewAPI(generics.ListCreateAPIView):
"""
A pagination list of tasks, unsorted.
......@@ -377,6 +376,7 @@ class PostProcessingTaskListViewAPI(generics.ListCreateAPIView):
else:
return TaskWriteSerializer
# all tasks
class AllTaskListViewAPI(generics.ListCreateAPIView):
"""
......@@ -418,6 +418,7 @@ class TaskDetailsViewAPI(generics.RetrieveUpdateDestroyAPIView):
"""
model = Task
queryset = Task.objects.all()
# serializer_class = TaskSerializer
def get_serializer_class(self):
......@@ -445,6 +446,7 @@ class WorkflowListViewAPI(generics.ListCreateAPIView):
filter_backends = (filters.DjangoFilterBackend,)
filter_class = WorkflowFilter
# example: /atdb/workflows/5/
class WorkflowDetailsViewAPI(generics.RetrieveUpdateDestroyAPIView):
model = Workflow
......@@ -598,6 +600,7 @@ def TaskSetStatus(request,pk,new_status,page=0):
# redirect to tasks list
return redirect('/atdb/?page=' + page)
# set a filter value in the session, used later by the 'get_searched_tasks' mechanism
def TaskSetFilter(request, filter):
request.session['task_filter'] = filter
......@@ -608,12 +611,14 @@ def TaskSetFilter(request,filter):
return redirect('/atdb/?page=1')
# set the defined list of ACTIVE_STATUSSES on the session, used later by the 'get_searched_tasks' mechanism
def TaskSetActiveFilter(request):
request.session['task_filter'] = settings.ACTIVE_STATUSSES
request.session['task_onhold_filter'] = None
return redirect('/atdb/?page=1')
def TaskSetOnHoldFilter(request, onhold):
request.session['task_onhold_filter'] = onhold
return redirect('/atdb/?page=1')
......@@ -681,7 +686,6 @@ def TaskSetStatusTables2(request,pk,new_status,query_params):
return redirect('/atdb/query/?' + current_query_params)
@login_required
def TaskMultiStatus(request, new_status, query_params):
# get the list of id's from the session
......@@ -782,15 +786,26 @@ class GetMinMaxTimeView(generics.ListAPIView):
'error': str(error)
})
from rest_framework.serializers import ListSerializer
# /atdb/get_unique_values_for_key/{key}
class GetUniqueValuesForKey(generics.ListAPIView):
queryset = Task.objects.all()
model = Task
filter_backends = (filters.DjangoFilterBackend,)
filter_class = TaskFilter
# override list and generate a custom response
def list(self, request, aggregation_key, **kwargs):
def list(self, request: Request, *args, **kwargs):
try:
print(aggregation_key)
return Response({'aggregation_key': aggregation_key
aggregation_key = kwargs['aggregation_key']
queryset = self.get_queryset()
queryset = self.filter_queryset(queryset)
return Response({'aggregation_key': aggregation_key,
'result': algorithms.unique_values_for_aggregation_key(
queryset,
aggregation_key)
})
except Exception as error:
return Response({
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment