def load_image_set(request) -> Response: try: image_set_id = int(request.query_params['image_set_id']) filter_annotation_type_id = request.query_params.get( 'filter_annotation_type_id') except (KeyError, TypeError, ValueError): raise ParseError image_set = get_object_or_404(ImageSet, pk=image_set_id) if not image_set.has_perm('read', request.user): return Response( { 'detail': 'permission for reading this image set missing.', }, status=HTTP_403_FORBIDDEN) serializer = ImageSetSerializer(image_set) serialized_image_set = serializer.data if filter_annotation_type_id: filter_annotation_type = get_object_or_404( AnnotationType, pk=filter_annotation_type_id) # TODO: find a cleaner solution to filter related field set wihtin ImageSet serializer serialized_image_set['images'] = ImageSerializer( image_set.images.exclude( annotations__annotation_type=filter_annotation_type).order_by( 'name'), many=True).data else: # TODO: find a cleaner solution to order related field set wihtin ImageSet serializer serialized_image_set['images'] = ImageSerializer( image_set.images.order_by('name'), many=True).data return Response({ 'image_set': serialized_image_set, }, status=HTTP_200_OK)
class AnnotationListSerializer(ModelSerializer): class Meta: model = Annotation fields = ( 'id', 'annotation_type', 'vector', 'image', ) image = ImageSerializer(read_only=True)
class AnnotationSerializer(ModelSerializer): verified_by_user = SerializerMethodField('is_verified_by_user') def is_verified_by_user(self, annotation): user = self.context['request'].user return Verification.objects.filter(user=user, annotation=annotation).exists() class Meta: model = Annotation fields = ( 'annotation_type', 'id', 'vector', 'verified_by_user', 'image', 'concealed', 'blurred', ) annotation_type = AnnotationTypeSerializer(read_only=True) image = ImageSerializer(read_only=True)