diff --git a/gracedb/api/v1/superevents/serializers.py b/gracedb/api/v1/superevents/serializers.py index a051d82ec1d4312114b82c996aa4c5f9b43d7b71..8009b79114a2fd599357cede78d62026378a5723 100644 --- a/gracedb/api/v1/superevents/serializers.py +++ b/gracedb/api/v1/superevents/serializers.py @@ -660,6 +660,37 @@ class SupereventVOEventSerializer(serializers.ModelSerializer): return voevent +class SupereventVOEventSerializerExternal(serializers.ModelSerializer): + """Read-only VOEvent serializer for non-internal users.""" + # Read only fields + issuer = serializers.SlugRelatedField(slug_field='username', + read_only=True) + created = serializers.DateTimeField(format=settings.GRACE_STRFTIME_FORMAT, + read_only=True) + links = serializers.SerializerMethodField(read_only=True) + + class Meta(SupereventVOEventSerializer.Meta): + fields = ('voevent_type', 'file_version', 'ivorn', 'created', + 'issuer', 'filename', 'N', 'links') + + def get_links(self, obj): + file_link = None + if obj.filename: + file_name = "{name},{version}".format(name=obj.filename, + version=obj.file_version) + file_link = api_reverse('superevents:superevent-file-detail', + args=[obj.superevent.superevent_id, file_name], + request=self.context.get('request', None)) + + link_dict = { + 'self': api_reverse('superevents:superevent-voevent-detail', + args=[obj.superevent.superevent_id, obj.N], + request=self.context.get('request', None)), + 'file': file_link, + } + return link_dict + + class SupereventEMFootprintSerializer(serializers.ModelSerializer): """ Should be read-only; only used as a nester serializer within diff --git a/gracedb/api/v1/superevents/views.py b/gracedb/api/v1/superevents/views.py index 5268ad9cd95967cba30a590d0dd2a6ba7bd36e87..2575d53aff2f0332a3790d86e1fdb4a1b665f1cd 100644 --- a/gracedb/api/v1/superevents/views.py +++ b/gracedb/api/v1/superevents/views.py @@ -18,6 +18,7 @@ from core.http import check_and_serve_file from core.vfile import VersionedFile, FileVersionError, FileVersionNameError from events.models import Event, Label from events.view_utils import reverse as gracedb_reverse +from ligoauth.utils import is_internal from superevents.buildVOEvent import VOEventBuilderException from superevents.models import Superevent, Log, Signoff from superevents.utils import remove_tag_from_log, \ @@ -34,11 +35,14 @@ from .permissions import SupereventModelPermissions, \ SupereventSignoffModelPermissions, SupereventSignoffTypeModelPermissions, \ SupereventSignoffTypeObjectPermissions, \ SupereventGroupObjectPermissionPermissions -from .serializers import SupereventSerializer, SupereventUpdateSerializer, \ - SupereventEventSerializer, SupereventLabelSerializer, \ - SupereventLogSerializer, SupereventLogTagSerializer, \ - SupereventVOEventSerializer, SupereventEMObservationSerializer, \ - SupereventSignoffSerializer, SupereventGroupObjectPermissionSerializer +from .serializers import ( + SupereventSerializer, SupereventUpdateSerializer, + SupereventEventSerializer, SupereventLabelSerializer, + SupereventLogSerializer, SupereventLogTagSerializer, + SupereventVOEventSerializer, SupereventVOEventSerializerExternal, + SupereventEMObservationSerializer, SupereventSignoffSerializer, + SupereventGroupObjectPermissionSerializer +) from .settings import SUPEREVENT_LOOKUP_URL_KWARG, SUPEREVENT_LOOKUP_REGEX from .viewsets import SupereventNestedViewSet from ..filters import DjangoObjectAndGlobalPermissionsFilter @@ -322,6 +326,12 @@ class SupereventVOEventViewSet(SafeCreateMixin, InheritDefaultPermissionsMixin, lookup_field = 'N' list_view_order_by = ('N',) + def get_serializer_class(self): + if is_internal(self.request.user): + return self.serializer_class + else: + return SupereventVOEventSerializerExternal + class SupereventEMObservationViewSet(SafeCreateMixin, InheritDefaultPermissionsMixin, SupereventNestedViewSet):