From d5c5ff44770ff1b1a37f10650b8e9643b3ea31e3 Mon Sep 17 00:00:00 2001 From: Tanner Prestegard <tanner.prestegard@ligo.org> Date: Wed, 1 Aug 2018 13:13:57 -0500 Subject: [PATCH] Fixing up superevent API urls Removing use of the router for defining superevent list and detail URLs, so that all of the possible URL/method combinations are explicitly defined. --- gracedb/superevents/api/urls.py | 54 ++++++++++++++++++++++----------- 1 file changed, 36 insertions(+), 18 deletions(-) diff --git a/gracedb/superevents/api/urls.py b/gracedb/superevents/api/urls.py index 8b02abf6c..b914b5c68 100644 --- a/gracedb/superevents/api/urls.py +++ b/gracedb/superevents/api/urls.py @@ -1,79 +1,97 @@ -# Changed for Django 1.11 from django.conf.urls import url, include -from rest_framework.routers import DefaultRouter from .views import * +from .settings import SUPEREVENT_LOOKUP_REGEX -router = DefaultRouter() - -# Base URLs for managing superevents -router.register(r'', SupereventViewSet) - -# Provides '{superevent_id}/' prefix for URLs -SUPEREVENT_DETAIL_ROOT = router.get_lookup_regex(SupereventViewSet) +# URL kwarg for superevent detail and nested pages +SUPEREVENT_DETAIL_ROOT = '(?P<{lookup_field}>{regex})'.format( + lookup_field=SupereventViewSet.lookup_field, + regex=SUPEREVENT_LOOKUP_REGEX) # URLs which are nested below a single superevent detail # These are included under a superevent's id URL prefix (see below) suburlpatterns = [ - # Events + # Superevent detail and update + url(r'^$', SupereventViewSet.as_view({'get': 'retrieve', + 'patch': 'partial_update'}), name='superevent-detail'), + # Superevent GW confirmation + url(r'^confirm_as_gw/$', SupereventViewSet.as_view( + {'post': 'confirm_as_gw'}), name='superevent-confirm-as-gw'), + + # Event list and create (add event to superevent) url(r'^events/$', SupereventEventViewSet.as_view({'get': 'list', 'post': 'create'}), name='superevent-event-list'), + # Event detail and delete (remove from superevent) url(r'^events/(?P<{lookup_field}>[GEHMT]\d+)/$'.format(lookup_field= SupereventEventViewSet.lookup_field), SupereventEventViewSet.as_view({ 'get': 'retrieve', 'delete': 'destroy'}), name='superevent-event-detail'), - # Labels + # Labelling list/create url(r'^labels/$', SupereventLabelViewSet.as_view({'get': 'list', 'post': 'create'}), name='superevent-label-list'), + # Labelling detail/delete url(r'^labels/(?P<{lookup_field}>.+)/$'.format(lookup_field= SupereventLabelViewSet.lookup_field), SupereventLabelViewSet.as_view({ 'get': 'retrieve', 'delete': 'destroy'}), name='superevent-label-detail'), - # Logs and tags + # Log list/create url(r'^logs/$', SupereventLogViewSet.as_view({'get': 'list', 'post': 'create'}), name='superevent-log-list'), + # Log detail url(r'^logs/(?P<{lookup_field}>\d+)/$'.format(lookup_field= SupereventLogViewSet.lookup_field), SupereventLogViewSet.as_view({ 'get': 'retrieve'}), name='superevent-log-detail'), + # Tag list (for log) and create url(r'^logs/(?P<{lookup_field}>\d+)/tags/$'.format(lookup_field= SupereventLogViewSet.lookup_field), SupereventLogTagViewSet.as_view({ 'get': 'list', 'post': 'create'}), name='superevent-log-tag-list'), + # Tag detail/delete url(r'^logs/(?P<{log_lookup}>\d+)/tags/(?P<{tag_lookup}>.+)/$'.format( log_lookup=SupereventLogViewSet.lookup_field, tag_lookup= SupereventLogTagViewSet.lookup_field), SupereventLogTagViewSet.as_view({'get': 'retrieve', 'delete': 'destroy'}), name='superevent-log-tag-detail'), - # Files - no option for POST since file uploads should be handled - # by writing a log message + # File list url(r'^files/$', SupereventFileViewSet.as_view({'get': 'list',}), name='superevent-file-list'), + # File detail (download) url(r'^files/(?P<{lookup_field}>.+)$'.format(lookup_field= SupereventFileViewSet.lookup_field), SupereventFileViewSet.as_view({ 'get': 'retrieve'}), name='superevent-file-detail'), + # Note: no option for POST since file uploads should be handled + # by writing a log message - # VOEvents + # VOEvent list/create url(r'^voevents/$', SupereventVOEventViewSet.as_view({'get': 'list', 'post': 'create'}), name='superevent-voevent-list'), + # VOEvent detail url(r'^voevents/(?P<{lookup_field}>\d+)/$'.format(lookup_field= SupereventVOEventViewSet.lookup_field), SupereventVOEventViewSet.as_view({'get': 'retrieve'}), name='superevent-voevent-detail'), - # EMObservations + # EMObservation list/create url(r'^emobservations/$', SupereventEMObservationViewSet.as_view( {'get': 'list', 'post': 'create'}), name='superevent-emobservation-list'), + # EMObservation detail 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 + [ +# Full urlpatterns +urlpatterns = [ + + # Superevent list and create + url(r'^$', SupereventViewSet.as_view({'get': 'list', 'post': 'create'}), + name='superevent-list'), + + # All sub-URLs for a single superevent url(r'^{superevent_id}/'.format(superevent_id=SUPEREVENT_DETAIL_ROOT), include(suburlpatterns)), ] - -- GitLab