From f9ae1f1905088b3ac002740a94df4349d623aac9 Mon Sep 17 00:00:00 2001 From: Brian Moe <brian.moe@ligo.org> Date: Thu, 14 Jun 2012 15:19:49 -0500 Subject: [PATCH] Added access to /general/ data dir to cli api --- gracedb/api.py | 25 ++++++++++++++++++++++++- gracedb/models.py | 8 ++++++-- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/gracedb/api.py b/gracedb/api.py index d203986b0..2e8beb0fa 100644 --- a/gracedb/api.py +++ b/gracedb/api.py @@ -17,7 +17,18 @@ def download(request, graceid, filename=""): except Event.DoesNotExist: return HttpResponseNotFound("Event not found") - filepath = os.path.join(event.datadir(), filename) + # The plan to deal with that wretched general/ directory maybe + # should be to move it INTO private. Then externally, things + # would look like they do now, but the code here would be MUCH + # more sane and much shorter. + + # UGLY hack to deal with /private vs /general dirs + general = False + if os.path.split(filename)[0] == "general": + filename = os.path.join(*os.path.split(filename)[1:]) + general = True + + filepath = os.path.join(event.datadir(general), filename) if not os.path.exists(filepath): response = HttpResponseNotFound("File does not exist") @@ -26,12 +37,24 @@ def download(request, graceid, filename=""): elif not filename: # Get list of files w/urls. rv = {} + filepath = event.datadir() for dirname, dirnames, filenames in os.walk(filepath): dirname = dirname[len(filepath):] # cut off base event dir path for filename in filenames: # relative path from root of event data dir filename = os.path.join(dirname, filename) rv[filename] = reverse(download, args=[graceid, filename]) + + # XXX UGH... that awful general/ dir + filepath = event.datadir(general=True) + for dirname, dirnames, filenames in os.walk(filepath): + # XXX HORRIBLE + dirname = dirname[len(filepath)-len("general"):] # cut off base event dir path + for filename in filenames: + # relative path from root of event data dir + filename = os.path.join(dirname, filename) + rv[filename] = reverse(download, args=[graceid, filename]) + response = HttpResponse(simplejson.dumps(rv), content_type="application/json") else: # get an actual file. diff --git a/gracedb/models.py b/gracedb/models.py index 4a2114b16..cf98c4956 100644 --- a/gracedb/models.py +++ b/gracedb/models.py @@ -95,9 +95,13 @@ 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): + def datadir(self, general=False): # Move to this. Not the (more) ad hoc crap that's floating around. - return os.path.join(settings.GRACEDB_DATA_DIR, self.graceid(), "private") + if general: + subdir = "general" + else: + subdir = "private" + return os.path.join(settings.GRACEDB_DATA_DIR, self.graceid(), subdir) def ligoApproved(self): return self.approval_set.filter(approvingCollaboration='L').count() -- GitLab