From ae954d12f08525dd196d333f5b17fcdb2276e194 Mon Sep 17 00:00:00 2001 From: Tanner Prestegard <tanner.prestegard@ligo.org> Date: Fri, 28 Sep 2018 13:00:28 -0500 Subject: [PATCH] Show log and emo issuer full name in web view The serializers for logs and emobservations (for both events and superevents) now give the user's full name for web views (unless it's blank; then fallback to username) and the username otherwise. We check for web view 'status' by seeing whether it is an AJAX request. This matches the previous behavior before the development of the superevents features. --- gracedb/api/v1/superevents/serializers.py | 26 +++++++-- gracedb/events/view_utils.py | 65 ++++++++++++----------- 2 files changed, 55 insertions(+), 36 deletions(-) diff --git a/gracedb/api/v1/superevents/serializers.py b/gracedb/api/v1/superevents/serializers.py index 8fc2b2121..e1b40a53e 100644 --- a/gracedb/api/v1/superevents/serializers.py +++ b/gracedb/api/v1/superevents/serializers.py @@ -297,8 +297,7 @@ class SupereventLogSerializer(serializers.ModelSerializer): self = serializers.SerializerMethodField(read_only=True) created = serializers.DateTimeField(format=settings.GRACE_STRFTIME_FORMAT, read_only=True) - issuer = serializers.SlugRelatedField(slug_field='username', - read_only=True) + issuer = serializers.SerializerMethodField(read_only=True) tag_names = serializers.SlugRelatedField(slug_field='name', many=True, source='tags', read_only=True) file = serializers.SerializerMethodField(read_only=True) @@ -330,6 +329,16 @@ class SupereventLogSerializer(serializers.ModelSerializer): args=[obj.superevent.superevent_id, obj.N], request=self.context.get('request', None)) + def get_issuer(self, obj): + # Show full name for web interface views (fetched via AJAX), unless + # it's blank - then show username. Outside of the web view, show the + # username. + request = self.context.get('request', None) + user = obj.issuer + if (request and request.is_ajax()): + return (user.get_full_name() or user.get_username()) + return user.get_username() + def get_file(self, obj): link = None if obj.filename: @@ -601,8 +610,7 @@ class SupereventEMObservationSerializer(serializers.ModelSerializer): 'same length.'), } # Read only fields - submitter = serializers.SlugRelatedField(slug_field='username', - read_only=True) + submitter = serializers.SerializerMethodField(read_only=True) created = serializers.DateTimeField(format=settings.GRACE_STRFTIME_FORMAT, read_only=True) footprint_count = serializers.SerializerMethodField(read_only=True) @@ -649,6 +657,16 @@ class SupereventEMObservationSerializer(serializers.ModelSerializer): def get_footprint_count(self, obj): return obj.emfootprint_set.count() + def get_submitter(self, obj): + # Show full name for web interface views (fetched via AJAX), unless + # it's blank - then show username. Outside of the web view, show the + # username. + request = self.context.get('request', None) + user = obj.submitter + if (request and request.is_ajax()): + return (user.get_full_name() or user.get_username()) + return user.get_username() + def validate(self, data): data = super(SupereventEMObservationSerializer, self).validate(data) ra_list = data.get('ra_list') diff --git a/gracedb/events/view_utils.py b/gracedb/events/view_utils.py index 1db5ca57e..fd994a31b 100644 --- a/gracedb/events/view_utils.py +++ b/gracedb/events/view_utils.py @@ -393,24 +393,19 @@ def eventLogToDict(log, request=None): # This is purely for convenience in working with the web interface. tag_names = [tag.name for tag in log.tags.all() ]; - if len(log.issuer.last_name): - display_name = "%s %s" % (log.issuer.first_name, log.issuer.last_name) - else: - display_name = log.issuer.username - - # Not sure why we need to do this; changing to just be username - issuer_info = log.issuer.username - #issuer_info = { - # "username": log.issuer.username, - # "display_name": display_name, - #} + # User display name + # Show full name for web interface views (fetched via AJAX), unless it's + # blank, then show username. Show username outside of web view. + user_display = log.issuer.get_username() + if (request and request.is_ajax()): + user_display = log.issuer.get_full_name() or log.issuer.get_username() return { "N" : log.N, "comment" : log.comment, "created" : log.created.strftime( settings.GRACE_STRFTIME_FORMAT), - "issuer" : issuer_info, + "issuer" : user_display, "filename" : log.filename, "file_version" : log.file_version, "tag_names" : tag_names, @@ -471,26 +466,32 @@ def embbEventLogToDict(eel, request=None): # EMObservation serializer. def emObservationToDict(emo, request=None): - uri = api_reverse("events:emobservation-detail", - args=[emo.event.graceid(), emo.N], - request=request) - - return { - "N" : emo.N, - "footprint_count" : emo.emfootprint_set.count(), - "self" : uri, - "created" : emo.created.strftime( - settings.GRACE_STRFTIME_FORMAT), - "submitter" : emo.submitter.username, - "group" : emo.group.name, - "comment" : emo.comment, - - "ra" : emo.ra, - "dec" : emo.dec, - "raWidth" : emo.raWidth, - "decWidth" : emo.decWidth, - "footprints" : [ emFootprintToDict(emf) for emf in emo.emfootprint_set.all()] - } + uri = api_reverse("events:emobservation-detail", + args=[emo.event.graceid(), emo.N], request=request) + + # User display name + # Show full name for web interface views (fetched via AJAX), unless it's + # blank, then show username. Show username outside of web view. + user_display = emo.submitter.get_username() + if (request and request.is_ajax()): + user_display = emo.submitter.get_full_name() or \ + emo.submitter.get_username() + + return { + "N": emo.N, + "footprint_count": emo.emfootprint_set.count(), + "self": uri, + "created": emo.created.strftime(settings.GRACE_STRFTIME_FORMAT), + "submitter": user_display, + "group": emo.group.name, + "comment": emo.comment, + "ra": emo.ra, + "dec": emo.dec, + "raWidth": emo.raWidth, + "decWidth": emo.decWidth, + "footprints": [emFootprintToDict(emf) for emf in + emo.emfootprint_set.all()] + } # EMFootprint serializer def emFootprintToDict(emf, request=None): -- GitLab