Skip to content
Snippets Groups Projects
Commit aa1ff34e authored by Brian Moe's avatar Brian Moe
Browse files

Added some documentation

parent 270af007
No related branches found
No related tags found
No related merge requests found
from django.http import HttpResponse, HttpResponseNotFound, HttpResponseForbidden, HttpResponseServerError from django.http import HttpResponse, HttpResponseNotFound
from django.http import HttpResponseForbidden, HttpResponseServerError
from django.core.urlresolvers import reverse as django_reverse from django.core.urlresolvers import reverse as django_reverse
from django.conf import settings
import simplejson import simplejson
from gracedb.models import Event from gracedb.models import Event
...@@ -9,18 +12,21 @@ from gracedb.models import Event ...@@ -9,18 +12,21 @@ from gracedb.models import Event
import os import os
import urllib import urllib
################################################################## ##################################################################
# Piston
REST_FRAMEWORK_SETTINGS = getattr(settings, 'REST_FRAMEWORK', {})
PAGINATE_BY = REST_FRAMEWORK_SETTINGS.get('PAGINATE_BY', 10)
################################################################## ##################################################################
# rest_framework # rest_framework
from rest_framework import serializers, status from rest_framework import serializers, status
from rest_framework.response import Response from rest_framework.response import Response
#from rest_framework.renderers import JSONRenderer, JSONPRenderer, YAMLRenderer, XMLRenderer #from rest_framework.renderers import JSONRenderer, JSONPRenderer
#from rest_framework.renderers import YAMLRenderer, XMLRenderer
from forms import CreateEventForm from forms import CreateEventForm
from views import _createEventFromForm from views import _createEventFromForm
from rest_framework import parsers # YAMLParser, MultiPartParser from rest_framework import parsers # YAMLParser, MultiPartParser
#from rest_framework.permissions import IsAuthenticated #from rest_framework.permissions import IsAuthenticated
#from rest_framework.permissions import AllowAny #from rest_framework.permissions import AllowAny
...@@ -44,37 +50,77 @@ class EventSerializer(serializers.Serializer): ...@@ -44,37 +50,77 @@ class EventSerializer(serializers.Serializer):
group = serializers.CharField(required=True, max_length=100) group = serializers.CharField(required=True, max_length=100)
analysisType = serializers.CharField(required=True, max_length=100) analysisType = serializers.CharField(required=True, max_length=100)
def eventToDict(event, columns=None, request=None): def eventToDict(event, columns=None, request=None):
"""Convert an Event to a dictionary so it can be serialized. (ugh)""" """Convert an Event to a dictionary so it can be serialized. (ugh)"""
# XXX Seems wrong. Need to understand serializers. # XXX Seems wrong. Need to understand serializers.
rv = {} rv = {}
graceid = event.graceid()
rv['submitter'] = event.submitter.name rv['submitter'] = event.submitter.name
rv['created'] = event.created rv['created'] = event.created
rv['group'] = event.group.name rv['group'] = event.group.name
rv['graceid'] = event.graceid() rv['graceid'] = graceid
rv['analysisType'] = event.get_analysisType_display() rv['analysisType'] = event.get_analysisType_display()
rv['instruments'] = event.instruments rv['instruments'] = event.instruments
rv['nevents'] = event.nevents rv['nevents'] = event.nevents
rv['far'] = event.far rv['far'] = event.far
rv['likelihood'] = event.likelihood rv['likelihood'] = event.likelihood
rv['labels'] = [labelling.label.name for labelling in event.labelling_set.all()] rv['labels'] = [labelling.label.name
rv['labels'] = [labelling.label.name for labelling in event.labelling_set.all()] for labelling in event.labelling_set.all()]
rv['links'] = { rv['links'] = {
"neighbors" : dict( "neighbors" : dict(
[(e.gpstime, reverse("event-detail", args=[e.graceid()])) [(e.gpstime, reverse("event-detail", args=[e.graceid()]))
for e in event.neighbors()]), for e in event.neighbors()]),
"data" : event.weburl(), "data" : event.weburl(),
"log" : reverse("eventlog-list", args=[event.graceid()], request=request), "log" : reverse("eventlog-list", args=[graceid], request=request),
"files" : reverse("files", args=[event.graceid()], request=request), "files" : reverse("files", args=[graceid], request=request),
"filemeta" : reverse("filemeta", args=[event.graceid()], request=request), "filemeta" : reverse("filemeta", args=[graceid], request=request),
"self" : reverse("event-detail", args=[event.graceid()], request=request), "self" : reverse("event-detail", args=[graceid], request=request),
} }
return rv return rv
class EventList(APIView): class EventList(APIView):
"""Docstring for *EventList* class!""" """
This resource represents the candidate events in GraceDB.
### GET
Retrieve events. You may use the following parameters:
* `query=Q` : use any query string as one might use on the query page.
* `limit=N` : the maximum number of events in a response. (default: 10)
* `page=N` : events starting with the (limit*(page-1))th event. (default: 1)
* `orderby=O` : how to order events. (default: -created)
Example:
`curl -X GET --insecure --cert $X509_USER_PROXY https://gracedb.ligo.org/api/events/?query=LowMass%20EM_READY&orderby=-far`
### POST
To create an event. Expects `multipart/form-data` mime-type with
parameters, `group`, `type` and a file part, `eventFile` containing
the analysis data.
Groups: `Test` `CBC` `Burst` `Stochastic` `Coherent`
Analysis Types:
* `LM` : Low Mass
* `HM` : High Mass
* `GRB` : GRB
* `RD` : Ringdown
* `OM` : Omega
* `Q` : Q
* `X` : X
* `CWB` : CWB
* `MBTA` : MBTA Online
* `HWINJ` : Hardware Injection
Example:
`curl -X POST -F "group=Test" -F "type=LM" -F "eventFile=@coinc.xml" --insecure --cert $X509_USER_PROXY https://gracedb.ligo.org/api/events/`
"""
#model = Event #model = Event
#serializer_class = EventSerializer #serializer_class = EventSerializer
##renderer_classes = (JSONRenderer, JSONPRenderer, YAMLRenderer, XMLRenderer) ##renderer_classes = (JSONRenderer, JSONPRenderer, YAMLRenderer, XMLRenderer)
...@@ -86,14 +132,14 @@ class EventList(APIView): ...@@ -86,14 +132,14 @@ class EventList(APIView):
def get(self, request): def get(self, request):
"""I am the GET docstring for EventList""" """I am the GET docstring for EventList"""
query = request.QUERY_PARAMS.get("query") query = request.QUERY_PARAMS.get("query")
limit = request.QUERY_PARAMS.get("limit", 10) limit = request.QUERY_PARAMS.get("limit", PAGINATE_BY)
page = request.QUERY_PARAMS.get("page", 1) page = request.QUERY_PARAMS.get("page", 1)
orderby = request.QUERY_PARAMS.get("orderby", "-created") orderby = request.QUERY_PARAMS.get("orderby", "-created")
if query is not None: if query is not None:
return Response("Query not implemented") return Response("Query not implemented")
page = int(page) page = int(page)
limit = int(limit) limit = int(limit)
first = page*limit first = (page-1)*limit
events = Event.objects.order_by(orderby) events = Event.objects.order_by(orderby)
count = events.count() count = events.count()
last = max(0, (count / limit) - 1) last = max(0, (count / limit) - 1)
...@@ -194,7 +240,9 @@ class EventLogDetail(APIView): ...@@ -194,7 +240,9 @@ class EventLogDetail(APIView):
return Response(eventLogToDict(rv, request=request)) return Response(eventLogToDict(rv, request=request))
class GracedbRoot(APIView): class GracedbRoot(APIView):
"""Root of the Gracedb REST API""" """
Root of the Gracedb REST API
"""
authentication_classes = (LigoAuthentication,) authentication_classes = (LigoAuthentication,)
parser_classes = () parser_classes = ()
def get(self, request): def get(self, request):
......
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