From 74b75a15208d8e5aeab73c3193f1e510368d44c7 Mon Sep 17 00:00:00 2001 From: "alexander.pace@ligo.org" <alexander.pace@ligo.org> Date: Fri, 14 Feb 2020 15:38:48 -0600 Subject: [PATCH] attempt #2 at turning off api caching --- gracedb/api/urls.py | 34 +------------- gracedb/api/v1/events/urls.py | 46 ++++++++++--------- gracedb/api/v1/superevents/urls.py | 73 +++++++++++++++--------------- gracedb/api/v1/urls.py | 11 +++-- 4 files changed, 70 insertions(+), 94 deletions(-) diff --git a/gracedb/api/urls.py b/gracedb/api/urls.py index 52c71f792..d445b6b75 100644 --- a/gracedb/api/urls.py +++ b/gracedb/api/urls.py @@ -1,42 +1,12 @@ from django.conf.urls import url, include -# Test to disable caching on the /api/ part of the site. -# From django-snippets: -# https://djangosnippets.org/snippets/355/ -from django.views.decorators.cache import never_cache from .v1 import urls as v1_urls from .v2 import urls as v2_urls app_name = 'api' -def never_cache_patterns(prefix, *args): - raise ValueError(prefix,args) - pattern_list = [], tterns, - for t in args: - if isinstance(t, (list, tuple)): - t = url(prefix=prefix, *t) - elif isinstance(t, RegexURLPattern): - t.add_prefix(prefix) - - t._callback = never_cache(t.callback) - pattern_list.append(t) - - return pattern_list - -#urlpatterns = [ -# url(r'^', include((never_cache(v1_urls), 'default'))), -# url(r'^v1/', include((never_cache(v1_urls), 'v1'))), -# url(r'^v2/', include((never_cache(v2_urls), 'v2'))), -#] - -#urlpatterns = [ -# url(r'^', include((v1_urls, 'default'))), -# url(r'^v1/', include((v1_urls, 'v1'))), -# url(r'^v2/', include((v2_urls, 'v2'))), -#] - urlpatterns = [ url(r'^', include((v1_urls, 'default'))), - url(r'^v1/', never_cache(include((v1_urls, 'v1')))), - url(r'^v2/', never_cache(include((v2_urls, 'v2')))), + url(r'^v1/', include((v1_urls, 'v1'))), + url(r'^v2/', include((v2_urls, 'v2'))), ] diff --git a/gracedb/api/v1/events/urls.py b/gracedb/api/v1/events/urls.py index 4bb80dd44..da6a75026 100644 --- a/gracedb/api/v1/events/urls.py +++ b/gracedb/api/v1/events/urls.py @@ -1,4 +1,6 @@ from django.conf.urls import url, include +# Turn off api caching: +from django.views.decorators.cache import never_cache from .views import * @@ -6,76 +8,76 @@ from .views import * urlpatterns = [ # Event Resources # events/[{graceid}[/{version}]] - url(r'^$', EventList.as_view(), name='event-list'), - url(r'^(?P<graceid>[GEHMT]\d+)$', EventDetail.as_view(), + url(r'^$', never_cache(EventList.as_view()), name='event-list'), + url(r'^(?P<graceid>[GEHMT]\d+)$', never_cache(EventDetail.as_view()), name='event-detail'), url(r'^(?P<graceid>[GEHMT]\d+)/update-grbevent/$', - GrbEventPatchView.as_view(), name='update-grbevent'), + never_cache(GrbEventPatchView.as_view()), name='update-grbevent'), # Event Log Resources # events/{graceid}/logs/[{logid}] - url(r'^(?P<graceid>[GEHMT]\d+)/log/$', EventLogList.as_view(), + url(r'^(?P<graceid>[GEHMT]\d+)/log/$', never_cache(EventLogList.as_view()), name='eventlog-list'), url(r'^(?P<graceid>[GEHMT]\d+)/log/(?P<n>\d+)$', - EventLogDetail.as_view(), name='eventlog-detail'), + never_cache(EventLogDetail.as_view()), name='eventlog-detail'), # VOEvent Resources # events/{graceid}/voevent/[{serial_number}] - url(r'^(?P<graceid>[GEHMT]\d+)/voevent/$', VOEventList.as_view(), + url(r'^(?P<graceid>[GEHMT]\d+)/voevent/$', never_cache(VOEventList.as_view()), name='voevent-list'), url(r'^(?P<graceid>[GEHMT]\d+)/voevent/(?P<n>\d+)$', - VOEventDetail.as_view(), name='voevent-detail'), + never_cache(VOEventDetail.as_view()), name='voevent-detail'), # EMBB Resources # events/{graceid}/logs/[{logid}] - url(r'^(?P<graceid>[GEHMT]\d+)/embb/$', EMBBEventLogList.as_view(), + url(r'^(?P<graceid>[GEHMT]\d+)/embb/$', never_cache(EMBBEventLogList.as_view()), name='embbeventlog-list'), url(r'^(?P<graceid>[GEHMT]\d+)/embb/(?P<n>\d+)$', - EMBBEventLogDetail.as_view(), name='embbeventlog-detail'), + never_cache(EMBBEventLogDetail.as_view()), name='embbeventlog-detail'), url(r'^(?P<graceid>[GEHMT]\d+)/emobservation/$', - EMObservationList.as_view(), name='emobservation-list'), + never_cache(EMObservationList.as_view()), name='emobservation-list'), url(r'^(?P<graceid>[GEHMT]\d+)/emobservation/(?P<n>\d+)$', - EMObservationDetail.as_view(), name='emobservation-detail'), + never_cache(EMObservationDetail.as_view()), name='emobservation-detail'), # url(r'(?P<graceid>[GEHMT]\d+)/emobservation/(?P<n>\d+)/emfootprint/$', # EMFootprintList.as_view(), name='emfootprint-list'), # url(r'(?P<graceid>[GEHMT]\d+)/emobservation/(?P<n>\d+)/emfootprint/(?P<m>\d+)$', # EMFootprintDetail.as_view(), name='emfootprint-detail'), # Tag Resources - url(r'^(?P<graceid>[GEHMT]\d+)/tag/$', EventTagList.as_view(), + url(r'^(?P<graceid>[GEHMT]\d+)/tag/$', never_cache(EventTagList.as_view()), name='eventtag-list'), url(r'^(?P<graceid>[GEHMT]\d+)/tag/(?P<tagname>.+)$', - EventTagDetail.as_view(), name='eventtag-detail'), + never_cache(EventTagDetail.as_view()), name='eventtag-detail'), url(r'^(?P<graceid>[GEHMT]\d+)/log/(?P<n>\d+)/tag/$', - EventLogTagList.as_view(), name='eventlogtag-list'), + never_cache(EventLogTagList.as_view()), name='eventlogtag-list'), url(r'^(?P<graceid>[GEHMT]\d+)/log/(?P<n>\d+)/tag/(?P<tagname>.+)$', - EventLogTagDetail.as_view(), name='eventlogtag-detail'), + never_cache(EventLogTagDetail.as_view()), name='eventlogtag-detail'), # Permission Resources url(r'^(?P<graceid>[GEHMT]\d+)/perms/$', - EventPermissionList.as_view(), name='eventpermission-list'), + never_cache(EventPermissionList.as_view()), name='eventpermission-list'), url(r'^(?P<graceid>[GEHMT]\d+)/perms/(?P<group_name>.+)/$', - GroupEventPermissionList.as_view(), name='groupeventpermission-list'), + never_cache(GroupEventPermissionList.as_view()), name='groupeventpermission-list'), url(r'^(?P<graceid>[GEHMT]\d+)/perms/(?P<group_name>.+)/(?P<perm_shortname>\w+)$', - GroupEventPermissionDetail.as_view(), name='groupeventpermission-detail'), + never_cache(GroupEventPermissionDetail.as_view()), name='groupeventpermission-detail'), # Event File Resources # events/{graceid}/files/[{filename}[/{version}]] url(r'^(?P<graceid>\w[\d]+)/files/(?P<filename>.+)?$', - Files.as_view(), name="files"), + never_cache(Files.as_view()), name="files"), # Event Labels # events/{graceid}/labels/[{label}] url(r'^(?P<graceid>\w[\d]+)/labels/(?P<label>.+)?$', - EventLabel.as_view(), name="labels"), + never_cache(EventLabel.as_view()), name="labels"), # Event Neighbors # events/{graceid}/neighbors/[?delta=(N|(N,N))] - url(r'^(?P<graceid>\w[\d]+)/neighbors/$', EventNeighbors.as_view(), + url(r'^(?P<graceid>\w[\d]+)/neighbors/$', never_cache(EventNeighbors.as_view()), name="neighbors"), # Operator Signoff Resources url(r'^(?P<graceid>[GEHMT]\d+)/signoff/$', - OperatorSignoffList.as_view(), name='signoff-list'), + never_cache(OperatorSignoffList.as_view()), name='signoff-list'), ] diff --git a/gracedb/api/v1/superevents/urls.py b/gracedb/api/v1/superevents/urls.py index 0ba80993f..6f9fc6aa1 100644 --- a/gracedb/api/v1/superevents/urls.py +++ b/gracedb/api/v1/superevents/urls.py @@ -1,4 +1,5 @@ from django.conf.urls import url, include +from django.views.decorators.cache import never_cache from .views import * from .settings import SUPEREVENT_LOOKUP_REGEX @@ -13,94 +14,94 @@ SUPEREVENT_DETAIL_ROOT = '(?P<{lookup_url_kwarg}>{regex})'.format( # These are included under a superevent's id URL prefix (see below) suburlpatterns = [ # Superevent detail and update - url(r'^$', SupereventViewSet.as_view({'get': 'retrieve', - 'patch': 'partial_update'}), name='superevent-detail'), + url(r'^$', never_cache(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'), + url(r'^confirm-as-gw/$', never_cache(SupereventViewSet.as_view( + {'post': 'confirm_as_gw'})), name='superevent-confirm-as-gw'), # Event list and creation (addition to superevent) - url(r'^events/$', SupereventEventViewSet.as_view({'get': 'list', - 'post': 'create'}), name='superevent-event-list'), + url(r'^events/$', never_cache(SupereventEventViewSet.as_view({'get': 'list', + 'post': 'create'})), name='superevent-event-list'), # Event detail and delete (remove from superevent) url(r'^events/(?P<{lookup_url_kwarg}>[GEHMT]\d+)/$'.format( lookup_url_kwarg=SupereventEventViewSet.lookup_url_kwarg), - SupereventEventViewSet.as_view({'get': 'retrieve', - 'delete': 'destroy'}), name='superevent-event-detail'), + never_cache(SupereventEventViewSet.as_view({'get': 'retrieve', + 'delete': 'destroy'})), name='superevent-event-detail'), # Labelling list and creation - url(r'^labels/$', SupereventLabelViewSet.as_view({'get': 'list', - 'post': 'create'}), name='superevent-label-list'), + url(r'^labels/$', never_cache(SupereventLabelViewSet.as_view({'get': 'list', + 'post': 'create'})), name='superevent-label-list'), # Labelling detail and deletion url(r'^labels/(?P<{lookup_url_kwarg}>.+)/$'.format(lookup_url_kwarg= SupereventLabelViewSet.lookup_url_kwarg), - SupereventLabelViewSet.as_view({'get': 'retrieve', - 'delete': 'destroy'}), name='superevent-label-detail'), + never_cache(SupereventLabelViewSet.as_view({'get': 'retrieve', + 'delete': 'destroy'})), name='superevent-label-detail'), # Log list and creation - url(r'^logs/$', SupereventLogViewSet.as_view({'get': 'list', - 'post': 'create'}), name='superevent-log-list'), + url(r'^logs/$', never_cache(SupereventLogViewSet.as_view({'get': 'list', + 'post': 'create'})), name='superevent-log-list'), # Log detail url(r'^logs/(?P<{lookup_url_kwarg}>\d+)/$'.format(lookup_url_kwarg= - SupereventLogViewSet.lookup_url_kwarg), SupereventLogViewSet.as_view({ - 'get': 'retrieve'}), name='superevent-log-detail'), + SupereventLogViewSet.lookup_url_kwarg), never_cache(SupereventLogViewSet.as_view({ + 'get': 'retrieve'})), name='superevent-log-detail'), # Tag list (for log) and creation (addition of tag to log) url(r'^logs/(?P<{lookup_url_kwarg}>\d+)/tags/$'.format( lookup_url_kwarg=SupereventLogViewSet.lookup_url_kwarg), - SupereventLogTagViewSet.as_view({'get': 'list', 'post': 'create'}), + never_cache(SupereventLogTagViewSet.as_view({'get': 'list', 'post': 'create'})), name='superevent-log-tag-list'), # Tag detail and deletion (removal of tag from log) url(r'^logs/(?P<{log_lookup}>\d+)/tags/(?P<{tag_lookup}>.+)/$'.format( log_lookup=SupereventLogViewSet.lookup_url_kwarg, tag_lookup= SupereventLogTagViewSet.lookup_url_kwarg), - SupereventLogTagViewSet.as_view({'get': 'retrieve', - 'delete': 'destroy'}), name='superevent-log-tag-detail'), + never_cache(SupereventLogTagViewSet.as_view({'get': 'retrieve', + 'delete': 'destroy'})), name='superevent-log-tag-detail'), # File list - url(r'^files/$', SupereventFileViewSet.as_view({'get': 'list',}), + url(r'^files/$', never_cache(SupereventFileViewSet.as_view({'get': 'list',})), name='superevent-file-list'), # File detail (download) url(r'^files/(?P<{lookup_url_kwarg}>.+)$'.format(lookup_url_kwarg= - SupereventFileViewSet.lookup_url_kwarg), SupereventFileViewSet.as_view( - {'get': 'retrieve'}), name='superevent-file-detail'), + SupereventFileViewSet.lookup_url_kwarg), never_cache(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 # VOEvent list and creation - url(r'^voevents/$', SupereventVOEventViewSet.as_view({'get': 'list', - 'post': 'create'}), name='superevent-voevent-list'), + url(r'^voevents/$', never_cache(SupereventVOEventViewSet.as_view({'get': 'list', + 'post': 'create'})), name='superevent-voevent-list'), # VOEvent detail url(r'^voevents/(?P<{lookup_url_kwarg}>\d+)/$'.format(lookup_url_kwarg= SupereventVOEventViewSet.lookup_url_kwarg), - SupereventVOEventViewSet.as_view({'get': 'retrieve'}), + never_cache(SupereventVOEventViewSet.as_view({'get': 'retrieve'})), name='superevent-voevent-detail'), # EMObservation list and creation - url(r'^emobservations/$', SupereventEMObservationViewSet.as_view( - {'get': 'list', 'post': 'create'}), + url(r'^emobservations/$', never_cache(SupereventEMObservationViewSet.as_view( + {'get': 'list', 'post': 'create'})), name='superevent-emobservation-list'), # EMObservation detail url(r'^emobservations/(?P<{lookup_url_kwarg}>\d+)/$'.format( lookup_url_kwarg=SupereventEMObservationViewSet.lookup_url_kwarg), - SupereventEMObservationViewSet.as_view({'get': 'retrieve'}), + never_cache(SupereventEMObservationViewSet.as_view({'get': 'retrieve'})), name='superevent-emobservation-detail'), # Signoff list and creation - url(r'signoffs/$', SupereventSignoffViewSet.as_view( - {'get': 'list', 'post': 'create'}), name='superevent-signoff-list'), + url(r'signoffs/$', never_cache(SupereventSignoffViewSet.as_view( + {'get': 'list', 'post': 'create'})), name='superevent-signoff-list'), # Signoff detail url(r'signoffs/(?P<{lookup_url_kwarg}>.+)/$'.format(lookup_url_kwarg= SupereventSignoffViewSet.lookup_url_kwarg), - SupereventSignoffViewSet.as_view({'get': 'retrieve', - 'patch': 'partial_update', 'delete': 'destroy'}), + never_cache(SupereventSignoffViewSet.as_view({'get': 'retrieve', + 'patch': 'partial_update', 'delete': 'destroy'})), name='superevent-signoff-detail'), # Permissions list and creation - url(r'permissions/$', SupereventGroupObjectPermissionViewSet.as_view( - {'get': 'list'}), name='superevent-permission-list'), + url(r'permissions/$', never_cache(SupereventGroupObjectPermissionViewSet.as_view( + {'get': 'list'})), name='superevent-permission-list'), # Permissions modification (expose/hide superevent). url(r'^permissions/modify/$', - SupereventGroupObjectPermissionViewSet.as_view({'post': 'modify'}), + never_cache(SupereventGroupObjectPermissionViewSet.as_view({'post': 'modify'})), name='superevent-permission-modify'), ] @@ -108,7 +109,7 @@ suburlpatterns = [ urlpatterns = [ # Superevent list and creation - url(r'^$', SupereventViewSet.as_view({'get': 'list', 'post': 'create'}), + url(r'^$', never_cache(SupereventViewSet.as_view({'get': 'list', 'post': 'create'})), name='superevent-list'), # All sub-URLs for a single superevent diff --git a/gracedb/api/v1/urls.py b/gracedb/api/v1/urls.py index b4d4597b8..75abc0395 100644 --- a/gracedb/api/v1/urls.py +++ b/gracedb/api/v1/urls.py @@ -8,20 +8,23 @@ from .main.views import GracedbRoot, PerformanceInfo, TagList, UserInfoView, \ from .events import urls as event_urls from .superevents import urls as superevent_urls +# Turn off api caching: +from django.views.decorators.cache import never_cache + urlpatterns = [ # Root level API resources ------------------------------------------------ # API root - url(r'^$', GracedbRoot.as_view(), name="root"), + url(r'^$', never_cache(GracedbRoot.as_view()), name="root"), # User information - url(r'^user-info/', UserInfoView.as_view(), name='user-info'), + url(r'^user-info/', never_cache(UserInfoView.as_view()), name='user-info'), # Tags - url(r'^tag/', TagList.as_view(), name='tag-list'), + url(r'^tag/', never_cache(TagList.as_view()), name='tag-list'), # Performance stats - url(r'^performance/', PerformanceInfo.as_view(), name='performance-info'), + url(r'^performance/', never_cache(PerformanceInfo.as_view()), name='performance-info'), # Certificate debugging #url(r'^cert-debug/', CertDebug.as_view(), name='cert-debug'), -- GitLab