Select Git revision
specification.py
TMSS-138: Restrict access to Cycle view via REST calls, add tests to...
Jörn Künsemöller authored and
Jorrit Schaap
committed
TMSS-138: Restrict access to Cycle view via REST calls, add tests to demonstrate use of groups and permissions
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
specification.py 7.52 KiB
"""
This file contains the viewsets (based on the elsewhere defined data models and serializers)
"""
from django.shortcuts import get_object_or_404
from rest_framework import viewsets
from .lofar_viewset import LOFARViewSet
from .. import models, serializers
from rest_framework.renderers import BrowsableAPIRenderer, TemplateHTMLRenderer
from rest_framework.decorators import permission_classes
from rest_framework.permissions import IsAuthenticatedOrReadOnly, DjangoModelPermissions
class TagsViewSet(LOFARViewSet):
queryset = models.Tags.objects.all()
serializer_class = serializers.TagsSerializer
class GeneratorTemplateViewSet(LOFARViewSet):
queryset = models.GeneratorTemplate.objects.all()
serializer_class = serializers.GeneratorTemplateSerializer
class DefaultGeneratorTemplateViewSet(LOFARViewSet):
queryset = models.DefaultGeneratorTemplate.objects.all()
serializer_class = serializers.DefaultGeneratorTemplateSerializer
class SchedulingUnitTemplateViewSet(LOFARViewSet):
queryset = models.SchedulingUnitTemplate.objects.all()
serializer_class = serializers.SchedulingUnitTemplateSerializer
class DefaultSchedulingUnitTemplateViewSet(LOFARViewSet):
queryset = models.DefaultSchedulingUnitTemplate.objects.all()
serializer_class = serializers.DefaultSchedulingUnitTemplateSerializer
class TaskTemplateViewSet(LOFARViewSet):
queryset = models.TaskTemplate.objects.all()
serializer_class = serializers.TaskTemplateSerializer
class DefaultTaskTemplateViewSet(LOFARViewSet):
queryset = models.DefaultTaskTemplate.objects.all()
serializer_class = serializers.DefaultTaskTemplateSerializer
class WorkRelationSelectionTemplateViewSet(LOFARViewSet):
queryset = models.WorkRelationSelectionTemplate.objects.all()
serializer_class = serializers.WorkRelationSelectionTemplateSerializer
class DefaultWorkRelationSelectionTemplateViewSet(LOFARViewSet):
queryset = models.DefaultWorkRelationSelectionTemplate.objects.all()
serializer_class = serializers.DefaultWorkRelationSelectionTemplateSerializer
class RoleViewSet(LOFARViewSet):
queryset = models.Role.objects.all()
serializer_class = serializers.RoleSerializer
class DatatypeViewSet(LOFARViewSet):
queryset = models.Datatype.objects.all()
serializer_class = serializers.DatatypeSerializer
class DataformatViewSet(LOFARViewSet):
queryset = models.Dataformat.objects.all()
serializer_class = serializers.DataformatSerializer
class CopyReasonViewSet(LOFARViewSet):
queryset = models.CopyReason.objects.all()
serializer_class = serializers.CopyReasonSerializer
class TaskConnectorsViewSet(LOFARViewSet):
queryset = models.TaskConnectors.objects.all()
serializer_class = serializers.TaskConnectorsSerializer
@permission_classes((DjangoModelPermissions,)) # example override of default permissions per viewset | todo: review for production
class CycleViewSet(LOFARViewSet):
queryset = models.Cycle.objects.all()
serializer_class = serializers.CycleSerializer
class ProjectViewSet(LOFARViewSet):
queryset = models.Project.objects.all()
serializer_class = serializers.ProjectSerializer
def get_queryset(self):
if 'cycle_pk' in self.kwargs:
cycle = get_object_or_404(models.Cycle, pk=self.kwargs['cycle_pk'])
return cycle.projects.all()
else:
return models.Project.objects.all()
class SchedulingSetViewSet(LOFARViewSet):
queryset = models.SchedulingSet.objects.all()
serializer_class = serializers.SchedulingSetSerializer
class SchedulingUnitDraftViewSet(LOFARViewSet):
queryset = models.SchedulingUnitDraft.objects.all()
serializer_class = serializers.SchedulingUnitDraftSerializer
def get_queryset(self):
if 'scheduling_set_pk' in self.kwargs:
scheduling_set = get_object_or_404(models.SchedulingSet, pk=self.kwargs['scheduling_set_pk'])
return scheduling_set.scheduling_unit_drafts.all()
else:
return models.SchedulingUnitDraft.objects.all()
class SchedulingUnitBlueprintViewSet(LOFARViewSet):
queryset = models.SchedulingUnitBlueprint.objects.all()
serializer_class = serializers.SchedulingUnitBlueprintSerializer
def get_queryset(self):
if 'scheduling_unit_draft_pk' in self.kwargs:
scheduling_unit_draft = get_object_or_404(models.SchedulingUnitDraft, pk=self.kwargs['scheduling_unit_draft_pk'])
return scheduling_unit_draft.related_scheduling_unit_blueprint.all()
else:
return models.SchedulingUnitBlueprint.objects.all()
class TaskDraftViewSet(LOFARViewSet):
queryset = models.TaskDraft.objects.all()
serializer_class = serializers.TaskDraftSerializer
def get_queryset(self):
if 'scheduling_unit_draft_pk' in self.kwargs:
scheduling_unit_draft = get_object_or_404(models.SchedulingUnitDraft, pk=self.kwargs['scheduling_unit_draft_pk'])
return scheduling_unit_draft.task_drafts.all()
else:
return models.TaskDraft.objects.all()
class TaskBlueprintViewSet(LOFARViewSet):
queryset = models.TaskBlueprint.objects.all()
serializer_class = serializers.TaskBlueprintSerializer
def get_queryset(self):
if 'task_draft_pk' in self.kwargs:
task_draft = get_object_or_404(models.TaskDraft, pk=self.kwargs['task_draft_pk'])
return task_draft.related_task_blueprint.all()
else:
return models.TaskBlueprint.objects.all()
class TaskRelationDraftViewSet(LOFARViewSet):
queryset = models.TaskRelationDraft.objects.all()
serializer_class = serializers.TaskRelationDraftSerializer
def get_queryset(self):
if 'task_draft_pk' in self.kwargs:
task_draft = get_object_or_404(models.TaskDraft, pk=self.kwargs['task_draft_pk'])
return task_draft.produced_by.all() | task_draft.consumed_by.all()
else:
return models.TaskRelationDraft.objects.all()
class TaskRelationBlueprintViewSet(LOFARViewSet):
queryset = models.TaskRelationBlueprint.objects.all()
serializer_class = serializers.TaskRelationBlueprintSerializer
def get_queryset(self):
if 'task_blueprint_pk' in self.kwargs:
task_blueprint = get_object_or_404(models.TaskBlueprint, pk=self.kwargs['task_blueprint_pk'])
return task_blueprint.produced_by.all() | task_blueprint.consumed_by.all()
elif 'task_relation_draft_pk' in self.kwargs:
task_relation_draft = get_object_or_404(models.TaskRelationDraft, pk=self.kwargs['task_relation_draft_pk'])
return task_relation_draft.related_task_relation_blueprint.all()
else:
return models.TaskRelationBlueprint.objects.all()
# --- JSON
class TaskBlueprintViewSetReactJSONform(LOFARViewSet):
queryset = models.TaskBlueprint.objects.all()
serializer_class = serializers.TaskBlueprintSerializerReactJSONform
class TaskBlueprintViewSetJSONeditor(LOFARViewSet):
queryset = models.TaskBlueprint.objects.all()
serializer_class = serializers.TaskBlueprintSerializerJSONeditor
class TaskBlueprintViewSetJSONeditorOnline(LOFARViewSet):
queryset = models.TaskBlueprint.objects.all()
serializer_class = serializers.TaskBlueprintSerializerJSONeditorOnline
# # todo: this is experimental / for demo purposes. Remove or make functional.
# class JSONEditorViewSet(LOFARViewSet):
# renderer_classes = [TemplateHTMLRenderer]
# template_name = 'react_jsonschema_form.html'
# queryset = models.TaskBlueprint.objects.all()
# serializer_class = serializers.TaskBlueprintJSONSerializer