From 18976cac34728484dcd68ad1757cd3529b7d802f Mon Sep 17 00:00:00 2001 From: Brian Moe <brian.moe@ligo.org> Date: Fri, 8 Jun 2012 14:02:34 -0500 Subject: [PATCH] CLI file download. Begin transition to RESTier API --- gracedb/api.py | 26 ++++++++++++++++++++++++++ gracedb/models.py | 4 ++++ gracedb/urls_rest.py | 6 ++++++ urls.py | 1 + 4 files changed, 37 insertions(+) create mode 100644 gracedb/api.py create mode 100644 gracedb/urls_rest.py diff --git a/gracedb/api.py b/gracedb/api.py new file mode 100644 index 000000000..286ef6317 --- /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 49f793f99..4a2114b16 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 000000000..a067ec3c1 --- /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 3f5836eba..6684532c1 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'), -- GitLab