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