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

abstracting get_object method in several views to a generic mixin

parent af0fcb01
No related branches found
No related tags found
No related merge requests found
...@@ -28,3 +28,19 @@ class GetParentSupereventMixin(GetParentMixin): ...@@ -28,3 +28,19 @@ class GetParentSupereventMixin(GetParentMixin):
# Currently, superevent_id ~ S0001, where 1 is the PK # Currently, superevent_id ~ S0001, where 1 is the PK
return {'id': int(superevent_id[1:])} return {'id': int(superevent_id[1:])}
class BaseGetObjectMixin(object):
query_field = None
def __init__(self, *args, **kwargs):
super(BaseGetObjectMixin, self).__init__(*args, **kwargs)
if self.query_field is None:
self.query_field = self.lookup_field
def get_object(self):
# TODO: do we need some kind of permissions check in here somewhere?
queryset = self.filter_queryset(self.get_queryset())
query_value = self.kwargs.get(self.lookup_field)
filter_kwargs = {self.query_field: query_value}
obj = get_object_or_404(queryset, **filter_kwargs)
return obj
...@@ -22,7 +22,7 @@ from events.view_utils import reverse as gracedb_reverse ...@@ -22,7 +22,7 @@ from events.view_utils import reverse as gracedb_reverse
#from events.api.views import IsAuthorizedForPipeline, LigoLwRenderer #from events.api.views import IsAuthorizedForPipeline, LigoLwRenderer
from events.api.backends import LigoAuthentication from events.api.backends import LigoAuthentication
from .mixins import GetParentSupereventMixin from .mixins import GetParentSupereventMixin, BaseGetObjectMixin
from .paginators import BasePaginationFactory, CustomLabelPagination, \ from .paginators import BasePaginationFactory, CustomLabelPagination, \
CustomLogTagPagination, CustomSupereventPagination CustomLogTagPagination, CustomSupereventPagination
from .serializers import SupereventSerializer, SupereventUpdateSerializer, \ from .serializers import SupereventSerializer, SupereventUpdateSerializer, \
...@@ -111,11 +111,13 @@ class SupereventEventViewSet(mixins.ListModelMixin, ...@@ -111,11 +111,13 @@ class SupereventEventViewSet(mixins.ListModelMixin,
class SupereventLabelViewSet(GetParentSupereventMixin, class SupereventLabelViewSet(GetParentSupereventMixin,
BaseGetObjectMixin,
viewsets.ModelViewSet): viewsets.ModelViewSet):
"""Superevent labels""" """Superevent labels"""
serializer_class = SupereventLabelSerializer serializer_class = SupereventLabelSerializer
pagination_class = CustomLabelPagination pagination_class = CustomLabelPagination
lookup_field = 'label_name' lookup_field = 'label_name'
query_field = 'label__name'
def get_queryset(self): def get_queryset(self):
superevent = self.get_parent() superevent = self.get_parent()
...@@ -123,13 +125,6 @@ class SupereventLabelViewSet(GetParentSupereventMixin, ...@@ -123,13 +125,6 @@ class SupereventLabelViewSet(GetParentSupereventMixin,
queryset = superevent.labelling_set.all() queryset = superevent.labelling_set.all()
return queryset return queryset
def get_object(self):
queryset = self.filter_queryset(self.get_queryset())
label_name = self.kwargs.get(self.lookup_field, None)
filter_kwargs = {'label__name': label_name}
obj = get_object_or_404(queryset, **filter_kwargs)
return obj
def destroy(self, request, *args, **kwargs): def destroy(self, request, *args, **kwargs):
instance = self.get_object() instance = self.get_object()
remove_label_from_superevent(instance, request.user, remove_label_from_superevent(instance, request.user,
...@@ -141,6 +136,7 @@ class SupereventLogViewSet(mixins.ListModelMixin, ...@@ -141,6 +136,7 @@ class SupereventLogViewSet(mixins.ListModelMixin,
mixins.RetrieveModelMixin, mixins.RetrieveModelMixin,
mixins.CreateModelMixin, mixins.CreateModelMixin,
GetParentSupereventMixin, GetParentSupereventMixin,
BaseGetObjectMixin,
viewsets.GenericViewSet): viewsets.GenericViewSet):
""" """
View for log messages attached to a superevent. View for log messages attached to a superevent.
...@@ -157,18 +153,9 @@ class SupereventLogViewSet(mixins.ListModelMixin, ...@@ -157,18 +153,9 @@ class SupereventLogViewSet(mixins.ListModelMixin,
# 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
# TODO: generalize this method, can be used for superevent, superevent-event, etc.
def get_object(self):
logger.warning('can probably do this generically on some mixin')
queryset = self.filter_queryset(self.get_queryset())
N = self.kwargs.get(self.lookup_field, None)
filter_kwargs = {'N': N}
obj = get_object_or_404(queryset, **filter_kwargs)
logger.warning('check permissions here? or just in get_queryset?')
return obj
class SupereventLogTagViewSet(GetParentSupereventMixin, class SupereventLogTagViewSet(GetParentSupereventMixin,
BaseGetObjectMixin,
viewsets.ModelViewSet): viewsets.ModelViewSet):
""" """
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.
...@@ -176,6 +163,7 @@ class SupereventLogTagViewSet(GetParentSupereventMixin, ...@@ -176,6 +163,7 @@ class SupereventLogTagViewSet(GetParentSupereventMixin,
serializer_class = SupereventLogTagSerializer serializer_class = SupereventLogTagSerializer
pagination_class = CustomLogTagPagination pagination_class = CustomLogTagPagination
lookup_field = 'tag_name' lookup_field = 'tag_name'
query_field = 'name'
def get_parent_log(self): def get_parent_log(self):
# TODO: check superevent permissions here # TODO: check superevent permissions here
...@@ -187,18 +175,12 @@ class SupereventLogTagViewSet(GetParentSupereventMixin, ...@@ -187,18 +175,12 @@ class SupereventLogTagViewSet(GetParentSupereventMixin,
parent_log = self.get_parent_log() parent_log = self.get_parent_log()
return parent_log.tags.all() return parent_log.tags.all()
def get_object(self):
queryset = self.filter_queryset(self.get_queryset())
tag_name = self.kwargs.get(self.lookup_field, None)
filter_kwargs = {'name': tag_name}
obj = get_object_or_404(queryset, **filter_kwargs)
return obj
def perform_destroy(self, instance): def perform_destroy(self, instance):
parent_log = self.get_parent_log() parent_log = self.get_parent_log()
remove_tag_from_log(parent_log, instance, self.request.user, remove_tag_from_log(parent_log, instance, self.request.user,
add_log_message=True, issue_alert=True) add_log_message=True, issue_alert=True)
# TODO: add permissions to this viewset # TODO: add permissions to this viewset
class SupereventFileViewSet(GetParentSupereventMixin, class SupereventFileViewSet(GetParentSupereventMixin,
viewsets.ViewSet): viewsets.ViewSet):
...@@ -261,6 +243,7 @@ class SupereventVOEventViewSet(mixins.ListModelMixin, ...@@ -261,6 +243,7 @@ class SupereventVOEventViewSet(mixins.ListModelMixin,
mixins.RetrieveModelMixin, mixins.RetrieveModelMixin,
mixins.CreateModelMixin, mixins.CreateModelMixin,
GetParentSupereventMixin, GetParentSupereventMixin,
BaseGetObjectMixin,
viewsets.GenericViewSet): viewsets.GenericViewSet):
""" """
View for VOEvents attached to a superevent. View for VOEvents attached to a superevent.
...@@ -275,14 +258,6 @@ class SupereventVOEventViewSet(mixins.ListModelMixin, ...@@ -275,14 +258,6 @@ class SupereventVOEventViewSet(mixins.ListModelMixin,
# 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
# TODO: generalize this method, can be used for superevent, superevent-event, etc.
def get_object(self):
queryset = self.filter_queryset(self.get_queryset())
N = self.kwargs.get(self.lookup_field, None)
filter_kwargs = {'N': N}
obj = get_object_or_404(queryset, **filter_kwargs)
return obj
class SupereventEMObservationViewSet(mixins.ListModelMixin, class SupereventEMObservationViewSet(mixins.ListModelMixin,
mixins.RetrieveModelMixin, mixins.RetrieveModelMixin,
...@@ -302,10 +277,3 @@ class SupereventEMObservationViewSet(mixins.ListModelMixin, ...@@ -302,10 +277,3 @@ class SupereventEMObservationViewSet(mixins.ListModelMixin,
# 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
# TODO: generalize this method, can be used for superevent, superevent-event, etc.
def get_object(self):
queryset = self.filter_queryset(self.get_queryset())
N = self.kwargs.get(self.lookup_field, None)
filter_kwargs = {'N': N}
obj = get_object_or_404(queryset, **filter_kwargs)
return obj
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