Newer
Older
from rest_framework.schemas.openapi import AutoSchema
from .models import DataProduct, DataProductFilter, DataLocation, WorkSpecification, ATDBProcessingSite
from .serializers import DataProductSerializer, \
DataProductFlatSerializer, DataLocationSerializer, \
WorkSpecificationSerializer
filter_class = None
def __init__(self, *args, **kwargs):
self._load_filters()
super().__init__(*args, **kwargs)
def _load_filters(self):
if self.Meta.filter_class is None:
raise Exception('Define filter_class meta attribute')
for item in self.Meta.filter_class.objects.all():
field_obj = self.Meta.model._meta.get_field(item.field)
filter_class, *_ = self.filter_for_lookup(field_obj, item.lookup_type)
self.base_filters[item.name] = filter_class(item.field)
# --- Filters ---
class DataProductFilterSet(DynamicFilterSet):
class Meta:
model = DataProduct
filter_class = DataProductFilter
# ---------- GUI Views -----------
atdb_hosts = ATDBProcessingSite.objects.values('name', 'url')
return render(request, "lofardata/index.html", {'atdb_hosts': atdb_hosts})
# ---------- REST API views ----------
class DataProductView(generics.ListCreateAPIView):
model = DataProduct
serializer_class = DataProductSerializer
# using the Django Filter Backend - https://django-filter.readthedocs.io/en/latest/index.html
filter_backends = (filters.DjangoFilterBackend,)

Roy de Goei
committed
class DataProductDetailsView(generics.RetrieveUpdateDestroyAPIView):
model = DataProduct
serializer_class = DataProductSerializer
queryset = DataProduct.objects.all()
class DataLocationView(generics.ListCreateAPIView):
model = DataLocation
serializer_class = DataLocationSerializer
queryset = DataLocation.objects.all().order_by('name')
class InsertWorkSpecificationSchema(AutoSchema):
def get_operation_id_base(self, path, method, action):
return 'createDataProductMulti'
class InsertMultiDataproductView(generics.CreateAPIView):
"""
Add single DataProduct
"""
queryset = DataProduct.objects.all()
serializer_class = DataProductFlatSerializer
def get_serializer(self, *args, **kwargs):
""" if an array is passed, set serializer to many """
if isinstance(kwargs.get('data', {}), list):
kwargs['many'] = True
return super().get_serializer(*args, **kwargs)
class InsertWorkSpecification(generics.CreateAPIView, generics.ListCreateAPIView):
queryset = WorkSpecification.objects.all()
serializer_class = WorkSpecificationSerializer
def get_queryset(self):
current_user: User = self.request.user
if not current_user.is_staff or not current_user.is_superuser:
return self.queryset.filter(created_by=current_user.id)