Skip to content
Snippets Groups Projects
Commit d4580b6b authored by Tanner Prestegard's avatar Tanner Prestegard Committed by GraceDB
Browse files

Adding custom pagination to superevents API to match events. It's bad, but...

Adding custom pagination to superevents API to match events. It's bad, but will have to serve until we can redo the whole thing
parent 2c06ecd2
No related branches found
No related tags found
1 merge request!8Superevents
...@@ -583,15 +583,14 @@ def voeventToDict(voevent, request=None): ...@@ -583,15 +583,14 @@ def voeventToDict(voevent, request=None):
#} #}
# Read in the filecontents # Read in the filecontents
filepath = os.path.join(voevent.event.datadir, voevent.filename) #filepath = os.path.join(voevent.event.datadir, voevent.filename)
text = None #text = None
try: #try:
text = open(filepath, 'r').read() # text = open(filepath, 'r').read()
except: #except:
pass # pass
return { return {
"text" : text,
"links" : links, "links" : links,
"N" : voevent.N, "N" : voevent.N,
"issuer" : issuer, "issuer" : issuer,
......
from rest_framework import pagination
from rest_framework.response import Response
from collections import OrderedDict
import logging
logger = logging.getLogger(__name__)
def BasePaginationFactory(links_dict=True, results_name='results'):
class CustomBasePagination(pagination.PageNumberPagination):
generate_links = links_dict
results_key = results_name
def get_paginated_response(self, data):
output = OrderedDict([
('start', 0),
('numRows', len(data)),
(self.results_key, data),
])
if self.generate_links:
link_dict = OrderedDict([
('self', self.request.build_absolute_uri()),
('first', self.request.build_absolute_uri()),
('last', self.request.build_absolute_uri()),
])
output['links'] = link_dict
return Response(output)
return CustomBasePagination
class CustomLabelPagination(pagination.PageNumberPagination):
def get_paginated_response(self, data):
output = OrderedDict([
('labels', data),
('links',
OrderedDict([
('self', self.request.build_absolute_uri()),
('superevent', self.request.build_absolute_uri()),
])),
])
return Response(output)
class CustomLogTagPagination(pagination.PageNumberPagination):
def get_paginated_response(self, data):
output = OrderedDict([
('tags', data),
])
return Response(output)
...@@ -277,10 +277,18 @@ class SupereventLogTagSerializer(serializers.ModelSerializer): ...@@ -277,10 +277,18 @@ class SupereventLogTagSerializer(serializers.ModelSerializer):
parent_log = serializers.HiddenField(write_only=True, parent_log = serializers.HiddenField(write_only=True,
default=ParentObjectDefault(context_key='log', default=ParentObjectDefault(context_key='log',
view_get_parent_method='get_parent_log')) view_get_parent_method='get_parent_log'))
self = serializers.SerializerMethodField(read_only=True)
class Meta: class Meta:
model = Tag model = Tag
fields = ('name', 'displayName', 'parent_log') fields = ('name', 'displayName', 'self', 'parent_log')
def get_self(self, obj):
superevent_id = self.context['view'].kwargs.get(
SUPEREVENT_LOOKUP_FIELD)
log_N = self.context['view'].kwargs.get('N')
return gracedb_reverse('superevent-log-tag-detail', args=[
superevent_id, log_N, obj.name], request=self.context['request'])
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(SupereventLogTagSerializer, self).__init__(*args, **kwargs) super(SupereventLogTagSerializer, self).__init__(*args, **kwargs)
...@@ -348,12 +356,12 @@ class SupereventVOEventSerializer(serializers.ModelSerializer): ...@@ -348,12 +356,12 @@ class SupereventVOEventSerializer(serializers.ModelSerializer):
issuer = serializers.SlugRelatedField(slug_field='username', issuer = serializers.SlugRelatedField(slug_field='username',
read_only=True) read_only=True)
links = serializers.SerializerMethodField(read_only=True) links = serializers.SerializerMethodField(read_only=True)
text = serializers.SerializerMethodField(read_only=True) #text = serializers.SerializerMethodField(read_only=True)
class Meta: class Meta:
model = VOEvent model = VOEvent
fields = ('voevent_type', 'file_version', 'ivorn', 'created', fields = ('voevent_type', 'file_version', 'ivorn', 'created',
'text', 'issuer', 'filename', 'N', 'links') 'issuer', 'filename', 'N', 'links')
def get_links(self, obj): def get_links(self, obj):
file_link = None file_link = None
...@@ -372,13 +380,13 @@ class SupereventVOEventSerializer(serializers.ModelSerializer): ...@@ -372,13 +380,13 @@ class SupereventVOEventSerializer(serializers.ModelSerializer):
} }
return link_dict return link_dict
def get_text(self, obj): #def get_text(self, obj):
text = None # text = None
if obj.filename: # if obj.filename:
filepath = os.path.join(obj.superevent.datadir, obj.filename) # filepath = os.path.join(obj.superevent.datadir, obj.filename)
text = open(filepath, 'r').read() # text = open(filepath, 'r').read()
return text # return text
#def __init__(self, *args, **kwargs): #def __init__(self, *args, **kwargs):
......
...@@ -23,6 +23,8 @@ from events.view_utils import reverse as gracedb_reverse ...@@ -23,6 +23,8 @@ from events.view_utils import reverse as gracedb_reverse
from events.api.backends import LigoAuthentication from events.api.backends import LigoAuthentication
from .mixins import GetParentSupereventMixin from .mixins import GetParentSupereventMixin
from .paginators import BasePaginationFactory, CustomLabelPagination, \
CustomLogTagPagination
from .serializers import SupereventSerializer, SupereventUpdateSerializer, \ from .serializers import SupereventSerializer, SupereventUpdateSerializer, \
SupereventEventSerializer, SupereventLabelSerializer, \ SupereventEventSerializer, SupereventLabelSerializer, \
SupereventLogSerializer, SupereventLogTagSerializer, \ SupereventLogSerializer, SupereventLogTagSerializer, \
...@@ -42,7 +44,7 @@ class SupereventViewSet(viewsets.ModelViewSet): ...@@ -42,7 +44,7 @@ class SupereventViewSet(viewsets.ModelViewSet):
""" """
queryset = Superevent.objects.all() queryset = Superevent.objects.all()
serializer_class = SupereventSerializer serializer_class = SupereventSerializer
pagination_class = None pagination_class = BasePaginationFactory(results_name='superevents')
lookup_field = SUPEREVENT_LOOKUP_FIELD lookup_field = SUPEREVENT_LOOKUP_FIELD
lookup_value_regex = SUPEREVENT_LOOKUP_REGEX lookup_value_regex = SUPEREVENT_LOOKUP_REGEX
...@@ -81,7 +83,7 @@ class SupereventEventViewSet(mixins.ListModelMixin, ...@@ -81,7 +83,7 @@ class SupereventEventViewSet(mixins.ListModelMixin,
viewsets.GenericViewSet): viewsets.GenericViewSet):
"""View for events attached to a superevent""" """View for events attached to a superevent"""
serializer_class = SupereventEventSerializer serializer_class = SupereventEventSerializer
pagination_class = None pagination_class = BasePaginationFactory(results_name='events')
lookup_field = 'graceid' lookup_field = 'graceid'
def get_queryset(self): def get_queryset(self):
...@@ -112,7 +114,7 @@ class SupereventLabelViewSet(GetParentSupereventMixin, ...@@ -112,7 +114,7 @@ class SupereventLabelViewSet(GetParentSupereventMixin,
viewsets.ModelViewSet): viewsets.ModelViewSet):
"""Superevent labels""" """Superevent labels"""
serializer_class = SupereventLabelSerializer serializer_class = SupereventLabelSerializer
pagination_class = None pagination_class = CustomLabelPagination
lookup_field = 'label_name' lookup_field = 'label_name'
def get_queryset(self): def get_queryset(self):
...@@ -145,13 +147,13 @@ class SupereventLogViewSet(mixins.ListModelMixin, ...@@ -145,13 +147,13 @@ class SupereventLogViewSet(mixins.ListModelMixin,
""" """
parser_class = parsers.FileUploadParser parser_class = parsers.FileUploadParser
serializer_class = SupereventLogSerializer serializer_class = SupereventLogSerializer
pagination_class = None pagination_class = BasePaginationFactory(results_name='log')
lookup_field = 'N' lookup_field = 'N'
def get_queryset(self): def get_queryset(self):
superevent = self.get_parent() superevent = self.get_parent()
logger.warning('may need to filter logs for users') logger.warning('may need to filter logs for users')
queryset = superevent.log_set.all() queryset = superevent.log_set.all().order_by('N')
# filter for those tagged with external access tagname if is_external(request.user) # filter for those tagged with external access tagname if is_external(request.user)
return queryset return queryset
...@@ -172,7 +174,7 @@ class SupereventLogTagViewSet(GetParentSupereventMixin, ...@@ -172,7 +174,7 @@ class SupereventLogTagViewSet(GetParentSupereventMixin,
View for tags attached to a log message which is attached to a superevent. View for tags attached to a log message which is attached to a superevent.
""" """
serializer_class = SupereventLogTagSerializer serializer_class = SupereventLogTagSerializer
pagination_class = None pagination_class = CustomLogTagPagination
lookup_field = 'tag_name' lookup_field = 'tag_name'
def get_parent_log(self): def get_parent_log(self):
...@@ -264,7 +266,7 @@ class SupereventVOEventViewSet(mixins.ListModelMixin, ...@@ -264,7 +266,7 @@ class SupereventVOEventViewSet(mixins.ListModelMixin,
View for VOEvents attached to a superevent. View for VOEvents attached to a superevent.
""" """
serializer_class = SupereventVOEventSerializer serializer_class = SupereventVOEventSerializer
pagination_class = None pagination_class = BasePaginationFactory(results_name='voevents')
lookup_field = 'N' lookup_field = 'N'
def get_queryset(self): def get_queryset(self):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment