diff --git a/gracedb/superevents/urls.py b/gracedb/superevents/urls.py index 20f0510162201ee988263312106e123de6596121..d15d0fc3e88e5d52c70e7ec9cf6c16718e951aa9 100644 --- a/gracedb/superevents/urls.py +++ b/gracedb/superevents/urls.py @@ -12,4 +12,10 @@ urlpatterns = [ regex=Superevent.ID_REGEX), views.webview, name="view"), url(r'^create_log/(?P<superevent_id>{regex})/$'.format( regex=Superevent.ID_REGEX), views.web_create_log, name="create-log"), + + # Files + url(r'^(?P<superevent_id>{regex})/files/$'.format( + regex=Superevent.ID_REGEX), views.file_list, name="file-list"), + url(r'^(?P<superevent_id>{regex})/files/(?P<filename>.*)$'.format( + regex=Superevent.ID_REGEX), views.file_download, name="file-download"), ] diff --git a/gracedb/superevents/views.py b/gracedb/superevents/views.py index 5d6dfbcfd04ecefa2d3ccc7ee6cd9d808da77642..1e5d5016bcaa8cf715fd075be44df29c83feb8eb 100644 --- a/gracedb/superevents/views.py +++ b/gracedb/superevents/views.py @@ -2,12 +2,13 @@ from django.http import HttpResponse, HttpResponseRedirect, Http404 from django.shortcuts import render from django.urls import reverse from django.utils.html import escape -from django.views.decorators.http import require_POST +from django.views.decorators.http import require_POST, require_GET from .models import Superevent, Log from .forms import LogCreateForm from .utils import get_superevent_by_date_id_or_404 +from core.http import check_and_serve_file from core.vfile import VersionedFile from events.permission_utils import internal_user_required, is_external @@ -135,3 +136,30 @@ def web_create_log(request, superevent_id): # Return to superevent page return HttpResponseRedirect(reverse('superevents:view', args=[superevent_id])) + + +# TODO: +# filter files for external users (see how this is done for events) +def file_list(request, superevent_id): + superevent = get_superevent_by_date_id_or_404(request, superevent_id) + file_list = superevent.list_files(absolute_paths=False) + + context = { + 'file_list': file_list, + 'title': 'Files for {0}'.format(superevent.superevent_id), + 'superevent_id': superevent.superevent_id, + } + return render(request, 'superevents/file_list.html', context=context) + +# TODO: +# add permission checking +def file_download(request, superevent_id, filename): + + # Get superevent + superevent = get_superevent_by_date_id_or_404(request, superevent_id) + + # Construct absolute path to file + file_path = os.path.join(superevent.datadir, filename) + + # Check file and serve it + return check_and_serve_file(request, file_path, ResponseClass=HttpResponse) diff --git a/gracedb/templates/superevents/file_list.html b/gracedb/templates/superevents/file_list.html new file mode 100644 index 0000000000000000000000000000000000000000..347ca2c48ad445530b8243f62b897be6940a8708 --- /dev/null +++ b/gracedb/templates/superevents/file_list.html @@ -0,0 +1,15 @@ +{% extends "base.html" %} +{% block title %}{{ title }}{% endblock %} +{% block heading %}{{ title }}{% endblock %} +{% block pageid %}Superevent files{% endblock %} + +{% block content %} +<p>{{ message }}</p> + +<ul> +{% for filename in file_list %} +<li><a href="{% url "superevents:file-download" superevent_id filename %}">{{ filename }}</a></li> +{% endfor %} +</ul> + +{% endblock %} diff --git a/gracedb/templates/superevents/view.html b/gracedb/templates/superevents/view.html index 23f3f85652c8728fe7cfb710a9a627880d4a3c43..bd0099376d1f608a3bbc062533b90fdd7c8d50b5 100644 --- a/gracedb/templates/superevents/view.html +++ b/gracedb/templates/superevents/view.html @@ -13,9 +13,9 @@ TBD: <ul style="padding-bottom: 30px;"> -<li>javascript update for labels</li> -<li>link for log message files, make sure to link to correct file version</li> -<li>event log tagging</li> +<li>Javascript update for labels</li> +<li>Log messages should display links for files (make sure to link to correct version)</li> +<li>Event log tagging from web interface</li> </ul> <div id='event_detail_content'> @@ -29,6 +29,7 @@ TBD: <th>Preferred Event</th> <th>GW events</th> <th>External events</th> + <th>Links</th> </tr> <tr> <td>{{ superevent.superevent_id }}</td> @@ -56,6 +57,7 @@ TBD: {% endfor %} </div> </td> + <td><a href="{% url "superevents:file-list" superevent.superevent_id %}">Data</a></td> </tr> </table> {% endblock %}