From 342852e83c489578d9cd1df8ef7b6e3d4b4f96ab Mon Sep 17 00:00:00 2001
From: Brian Moe <brian.moe@ligo.org>
Date: Wed, 30 May 2012 15:14:55 -0500
Subject: [PATCH] First stab at requesting ligolw from search results.

---
 gracedb/views.py             | 30 +++++++++++++++++++++++++-----
 templates/gracedb/query.html |  2 +-
 2 files changed, 26 insertions(+), 6 deletions(-)

diff --git a/gracedb/views.py b/gracedb/views.py
index e4fe34b35..2789ed332 100644
--- a/gracedb/views.py
+++ b/gracedb/views.py
@@ -592,12 +592,32 @@ def search(request, format=""):
             elif format == "jqgrid":
                 return jqgridResponse(request, objects)
             elif 'ligolw' in request.POST:
-                response = HttpResponse(mimetype='application/javascript')
-                response = HttpResponse(mimetype='text/plain')
-                msg = 'oh hai'
-                response['Content-length'] = len(msg)
-                response.write(msg)
+
+                if objects.count() > 1000:
+                    # XXX  Make this -- Better.
+                    return HttpResponse("No more than 1000 events currently allowed.")
+
+                from glue.ligolw import ligolw
+                # lsctables MUST be loaded before utils.
+                from glue.ligolw import lsctables
+                from glue.ligolw import utils
+                from glue.ligolw.utils import ligolw_add
+                from settings import GRACEDB_DATA_DIR
+
+                xmldoc = ligolw.Document()
+                for obj in objects:
+                    fname = os.path.join(GRACEDB_DATA_DIR, obj.graceid(), "private", "coinc.xml")
+                    utils.load_filename(fname, xmldoc=xmldoc)
+
+                ligolw_add.reassign_ids(xmldoc)
+                ligolw_add.merge_ligolws(xmldoc)
+                ligolw_add.merge_compatible_tables(xmldoc)
+
+                response = HttpResponse(mimetype='application/xml')
+                response['Content-Disposition'] = 'attachment; filename=gracedb-query.xml'
+                utils.write_fileobj(xmldoc, response)
                 return response
+
             else:
                 #objects = objects[:limit]
                 #if objects.count() >= limit:
diff --git a/templates/gracedb/query.html b/templates/gracedb/query.html
index 213c212ac..7cf2fce80 100644
--- a/templates/gracedb/query.html
+++ b/templates/gracedb/query.html
@@ -31,7 +31,7 @@ onload="document.search_form.query.focus();"
     </tr>
     <tr><td/><td>{% include "gracedb/query_help_frag.html" %}</td></tr>
   </table>
-  <input type="Submit" name="Submit" value="submit"/>
+  <input type="Submit" name="submit" value="Submit"/>
   <input type="Submit" name="ligolw" value="LigoLW"/>
 </form>
 
-- 
GitLab