[cig-commits] r13333 - in cs/portal/trunk/northridge: SeismoWebPortal SeismoWebPortal/templates/SeismoWebPortal backend

leif at geodynamics.org leif at geodynamics.org
Tue Nov 18 14:40:00 PST 2008


Author: leif
Date: 2008-11-18 14:40:00 -0800 (Tue, 18 Nov 2008)
New Revision: 13333

Modified:
   cs/portal/trunk/northridge/SeismoWebPortal/mezzanine.py
   cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/pluggable.html
   cs/portal/trunk/northridge/SeismoWebPortal/views.py
   cs/portal/trunk/northridge/backend/daemon.py
Log:
Allow the daemon and the user to download 3D models.


Modified: cs/portal/trunk/northridge/SeismoWebPortal/mezzanine.py
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/mezzanine.py	2008-11-18 22:27:17 UTC (rev 13332)
+++ cs/portal/trunk/northridge/SeismoWebPortal/mezzanine.py	2008-11-18 22:40:00 UTC (rev 13333)
@@ -21,6 +21,7 @@
     def editable(self, builtIn): return not builtIn
     uploadable = False
     downloadableAsText = False
+    downloadableAsTarGz = False
     downloadableAsKML = False
     duplicatable = True
 
@@ -797,12 +798,21 @@
     creatable = False
     uploadable = True
     duplicatable = False
+    downloadableAsTarGz = True
 
     def changeManipulator(self, user):
         object = self.obj
         return self.Model.ChangeManipulator(getattr(object, object._meta.pk.attname), follow = dict(pathname = False))
 
+    def downloadAsTarGz(self, request):
+        from shutil import copyfileobj
+        response = HttpResponse(mimetype='application/x-tar-gz')
+        response['Content-Disposition'] = 'attachment; filename=%s.tgz' % self.obj.name
+        stream = open(self.obj.get_pathname_filename(), 'r')
+        copyfileobj(stream, response)
+        return response
 
+
 class Specfem3DGlobeParameters(Object):
     Model = models.Specfem3DGlobeParameters
 

Modified: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/pluggable.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/pluggable.html	2008-11-18 22:27:17 UTC (rev 13332)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/pluggable.html	2008-11-18 22:40:00 UTC (rev 13333)
@@ -162,6 +162,13 @@
                                         {% endif %}
                                     </li>
                                     <li>
+                                        {% if downloadableAsTarGz %}
+                                        <a href="{{root}}/?class={{klass}}&object={{object.id}}&action=downloadAsTarGz"><img src="{{root}}/images/document.gif" width=32 height=32> Compressed Archive</a>
+                                        {% else %}
+                                        <span class="actionMenuItem disabled"><img src="{{root}}/images/document.gif" width=32 height=32> Compressed Archive</span>
+                                        {% endif %}
+                                    </li>
+                                    <li>
                                         {% if downloadableAsKML %}
                                         <a href="{{root}}/?class={{klass}}&object={{object.id}}&action=downloadAsKML"><img src="{{root}}/images/kml.icon.gif"> Google Earth Map</a>
                                         {% else %}

Modified: cs/portal/trunk/northridge/SeismoWebPortal/views.py
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/views.py	2008-11-18 22:27:17 UTC (rev 13332)
+++ cs/portal/trunk/northridge/SeismoWebPortal/views.py	2008-11-18 22:40:00 UTC (rev 13333)
@@ -106,8 +106,11 @@
                 duplicatable = obj.duplicatable,
                 deletable = not builtIn,
                 downloadableAsText = obj.downloadableAsText,
+                downloadableAsTarGz = obj.downloadableAsTarGz,
                 downloadableAsKML = obj.downloadableAsKML,
-                downloadable = obj.downloadableAsText or obj.downloadableAsKML,
+                downloadable = (obj.downloadableAsText or
+                                obj.downloadableAsTarGz or
+                                obj.downloadableAsKML),
                 views = obj.views,
                 ))
 
@@ -131,6 +134,8 @@
                 c['nextAction'] = 'view'
             elif action == 'downloadAsText':
                 ret = obj.downloadAsText(request)
+            elif action == 'downloadAsTarGz':
+                ret = obj.downloadAsTarGz(request)
             elif action == 'downloadAsKML':
                 ret = obj.downloadAsKML(request)
             elif action == 'start':
@@ -460,6 +465,7 @@
             "parameters.pml":  parameters_pml,
             "event.txt":       event_txt,
             "stations.txt":    stations_txt,
+            "model.tgz":       model_tgz,
             }
 
     elif run.code == models.MineosParameters.code:
@@ -519,6 +525,11 @@
     return stations.downloadAsText(request)
 
 
+def model_tgz(request, run):
+    model = mezzanine.Specfem3DGlobeModel(run.parameters.model)
+    return model.downloadAsTarGz(request)
+
+
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 # daemon interface -- Mineos input file downloads
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Modified: cs/portal/trunk/northridge/backend/daemon.py
===================================================================
--- cs/portal/trunk/northridge/backend/daemon.py	2008-11-18 22:27:17 UTC (rev 13332)
+++ cs/portal/trunk/northridge/backend/daemon.py	2008-11-18 22:40:00 UTC (rev 13333)
@@ -532,6 +532,7 @@
         parameters = 'par_file.txt'
         event = 'event.txt'
         stations = 'stations.txt'
+        model = 'model.tgz'
         job = Job(
             self,
             "run",
@@ -541,6 +542,7 @@
             arguments = ['--par-file=' + parameters,
                          '--cmt-solution=' + event,
                          '--stations=' + stations,
+                         '--model=' + model,
                          "--scheduler.wait=True",
                          "--job.name=run%05d" % self.id,
                          "--macros.run.id=%05d" % self.id,
@@ -550,7 +552,7 @@
                          ] + dry,
             )
         job.urlForInputFile = self.urlForInputFile
-        job.inputFiles = [parameters, event, stations]
+        job.inputFiles = [parameters, event, stations, model]
         job.outputFiles = ["specfem3dglobe.tar.gz", "output_mesher.txt", "output_solver.txt", "output_build.txt"]
         return job
 



More information about the CIG-COMMITS mailing list