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