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

adding EMObservations to superevents

parent 468cdac9
No related branches found
No related tags found
1 merge request!8Superevents
......@@ -2,7 +2,7 @@ from rest_framework import serializers, validators
from django.contrib.auth import get_user_model
from django.utils.translation import ugettext_lazy as _
from django.conf import settings
from ..models import Superevent, Labelling, Log, VOEvent
from ..models import Superevent, Labelling, Log, VOEvent, EMObservation
from ..forms import LogCreateForm
from ..utils import create_superevent, update_superevent, add_tag_to_log, \
create_log, add_event_to_superevent, add_label_to_superevent
......@@ -10,7 +10,7 @@ from ..utils import create_superevent, update_superevent, add_tag_to_log, \
from .fields import ParentObjectDefault
from .settings import SUPEREVENT_LOOKUP_FIELD
from events.models import Event, Label, Tag
from events.models import Event, Label, Tag, EMGroup
from events.view_utils import reverse as gracedb_reverse
from events.api.fields import EventGraceidField
......@@ -380,38 +380,47 @@ class SupereventVOEventSerializer(serializers.ModelSerializer):
}
return link_dict
#def get_text(self, obj):
# text = None
# if obj.filename:
# filepath = os.path.join(obj.superevent.datadir, obj.filename)
# text = open(filepath, 'r').read()
# TODO:
# VOEvent creation!!
# return text
class SupereventEMObservationSerializer(serializers.ModelSerializer):
# Read only fields
submitter = serializers.SlugRelatedField(slug_field='username',
read_only=True)
created = serializers.DateTimeField(format=settings.GRACE_STRFTIME_FORMAT,
read_only=True)
footprint_count = serializers.SerializerMethodField(read_only=True)
footprints = serializers.SerializerMethodField(read_only=True)
#def __init__(self, *args, **kwargs):
# super(SupereventLogSerializer, self).__init__(*args, **kwargs)
# self.fields['filename'].read_only = True
# self.fields['file_version'].read_only = True
#def get_self(self, obj):
# superevent_id = self.context['view'].kwargs.get(
# SUPEREVENT_LOOKUP_FIELD)
# return gracedb_reverse('superevent-log-detail', args=[
# superevent_id, obj.N], request=self.context['request'])
#def create(self, validated_data):
# # Check user permissions here, or somewhere else? Maybe just on viewset
# # create resource
# # Convert to be used with Django form for Logs
# validated_data['issuer'] = validated_data.pop('submitter').id
# validated_data['superevent'] = validated_data['superevent'].id
# if validated_data.has_key('data_file'):
# validated_data['filename'] = validated_data['data_file'].name
# Both
group = serializers.SlugRelatedField(slug_field='name',
queryset=EMGroup.objects.all())
# form = LogCreateForm(validated_data, validated_data)
# if form.is_valid():
# obj = form.save()
# Write only fields
user = serializers.HiddenField(write_only=True,
default=serializers.CurrentUserDefault())
# return obj
class Meta:
model = EMObservation
fields = ('created', 'N', 'submitter', 'group', 'ra', 'raWidth', 'dec',
'decWidth', 'footprint_count', 'footprints', 'user')
def get_footprint_count(self, obj):
return obj.emfootprint_set.count()
def get_footprints(self, obj):
return [{
'exposure_time': fp.exposure_time,
'start_time': fp.start_time.strftime(
settings.GRACE_STRFTIME_FORMAT),
'N': fp.N,
'raWidth': fp.raWidth,
'decWidth': fp.decWidth,
'ra': fp.ra,
'dec': fp.dec,
} for fp in obj.emfootprint_set.all().order_by('-N')]
return 'test'
# TODO:
# EMObservation creation!!
......@@ -61,6 +61,15 @@ suburlpatterns = [
SupereventVOEventViewSet.lookup_field),
SupereventVOEventViewSet.as_view({'get': 'retrieve'}),
name='superevent-voevent-detail'),
# EMObservations
url(r'^emobservations/$', SupereventEMObservationViewSet.as_view(
{'get': 'list', 'post': 'create'}),
name='superevent-emobservation-list'),
url(r'^emobservations/(?P<{lookup_field}>\d+)/$'.format(lookup_field=
SupereventEMObservationViewSet.lookup_field),
SupereventEMObservationViewSet.as_view({'get': 'retrieve'}),
name='superevent-emobservation-detail'),
]
urlpatterns = router.urls + [
......
from events.view_utils import reverse
from .views import SupereventViewSet, SupereventEventViewSet, \
SupereventLabelViewSet, SupereventLogViewSet, SupereventLogTagViewSet, \
SupereventFileViewSet, SupereventVOEventViewSet
SupereventFileViewSet, SupereventVOEventViewSet, \
SupereventEMObservationViewSet
# Placeholder parameters for getting URLs with reverse
......@@ -13,6 +14,7 @@ PH = {
SupereventLogTagViewSet.lookup_field: 'TAG_NAME', # tag name
SupereventFileViewSet.lookup_field: 'FILE_NAME', # file name
SupereventVOEventViewSet.lookup_field: '4444', # VOEvent number (N)
SupereventEMObservationViewSet.lookup_field: '5555', # EMObservation number (N)
}
......@@ -38,6 +40,9 @@ def construct_api_url_templates(request=None):
'superevent-voevent-list': [],
'superevent-voevent-detail': [
PH[SupereventVOEventViewSet.lookup_field]],
'superevent-emobservation-list': [],
'superevent-emobservation-detail': [
PH[SupereventEMObservationViewSet.lookup_field]],
}
# Dict of URL templates:
......
......@@ -28,7 +28,7 @@ from .paginators import BasePaginationFactory, CustomLabelPagination, \
from .serializers import SupereventSerializer, SupereventUpdateSerializer, \
SupereventEventSerializer, SupereventLabelSerializer, \
SupereventLogSerializer, SupereventLogTagSerializer, \
SupereventVOEventSerializer
SupereventVOEventSerializer, SupereventEMObservationSerializer
from .settings import SUPEREVENT_LOOKUP_FIELD, SUPEREVENT_LOOKUP_REGEX
......@@ -283,3 +283,29 @@ class SupereventVOEventViewSet(mixins.ListModelMixin,
obj = get_object_or_404(queryset, **filter_kwargs)
return obj
class SupereventEMObservationViewSet(mixins.ListModelMixin,
mixins.RetrieveModelMixin,
mixins.CreateModelMixin,
GetParentSupereventMixin,
viewsets.GenericViewSet):
"""
View for EMObservations attached to a superevent.
"""
serializer_class = SupereventEMObservationSerializer
pagination_class = BasePaginationFactory(results_name='observations')
lookup_field = 'N'
def get_queryset(self):
superevent = self.get_parent()
queryset = superevent.emobservation_set.all()
# filter for those tagged with external access tagname if is_external(request.user)
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