diff --git a/gracedb/api.py b/gracedb/api.py new file mode 100644 index 0000000000000000000000000000000000000000..286ef63177de4d689cf27c5ebb1b80d2760ea80e --- /dev/null +++ b/gracedb/api.py @@ -0,0 +1,26 @@ + +from django.http import HttpResponse, HttpResponseNotFound + +from gracedb.models import Event + +import os + +def download(request, graceid, filename=None): + #response = HttpResponse(buildVOEvent(event), content_type="application/xml") + if not filename: + response = HttpResponseNotFound("Not Implemented.") + response.status_code = 404 + try: + event = Event.getByGraceid(graceid) + filepath = os.path.join(event.datadir(), filename) + if not os.path.exists(filepath): + response = HttpResponseNotFound("File does not exist") + elif not os.access(filepath, os.R_OK): + response = HttpResponseNotFound("File not readable") + else: + response = HttpResponse(open(filepath, "r"), content_type="application/octet-stream") + response['Content-Disposition'] = 'attachment; filename=%s' % os.path.basename(filename) + except Event.DoesNotExist: + response = HttpResponseNotFound("Event does not exist") + + return response diff --git a/gracedb/models.py b/gracedb/models.py index 49f793f99e3a716d1dbede2d97937ac76ee09231..4a2114b165dc803b9a46475e7bce5e673d268c5b 100644 --- a/gracedb/models.py +++ b/gracedb/models.py @@ -95,6 +95,10 @@ class Event(models.Model): #return "pcdev1.phys.uwm.edu:/archive/gracedb/data/%s" % self.graceid() return "file://pcdev1.phys.uwm.edu/archive/gracedb/data/%s" % self.graceid() + def datadir(self): + # Move to this. Not the (more) ad hoc crap that's floating around. + return os.path.join(settings.GRACEDB_DATA_DIR, self.graceid(), "private") + def ligoApproved(self): return self.approval_set.filter(approvingCollaboration='L').count() diff --git a/gracedb/urls_rest.py b/gracedb/urls_rest.py new file mode 100644 index 0000000000000000000000000000000000000000..a067ec3c18b2911e2a69a6a4e27bbf9773181253 --- /dev/null +++ b/gracedb/urls_rest.py @@ -0,0 +1,6 @@ + +from django.conf.urls.defaults import * + +urlpatterns = patterns('gracedb.api', + url (r'^event/(?P<graceid>[\w\d]+)/files/(?P<filename>.+)?$', 'download', name="download"), +) diff --git a/urls.py b/urls.py index 3f5836eba315011dc1e84b7a39d6d56b0d7c1c34..6684532c10dab2594ce0911542463c2ce27032bc 100644 --- a/urls.py +++ b/urls.py @@ -16,6 +16,7 @@ urlpatterns = patterns('', url (r'^$', 'gracedb.views.index', name="home"), (r'^events/', include('gracedb.urls')), + (r'^api/', include('gracedb.urls_rest')), (r'^options/', include('userprofile.urls')), (r'^cli/create', 'gracedb.views.create'), (r'^cli/ping', 'gracedb.views.ping'),