Beispiel #1
0
def run_simulation(request, response):
    
    jsonData = request.json
    #parse advanced settings:
    
    
    #DO IT HERE, NOW PRIOR TO ANY CALCULATION!!!!
    #FIXME: HANDLE EXCEPTIONS!!!!!
    key_mcerpt_npts = gk.DNP
    mcerp.npts = glb.mcerp_npts if not key_mcerpt_npts in jsonData else glb.cast(key_mcerpt_npts, jsonData[key_mcerpt_npts])
    
    
    runinfo = RunInfo(jsonData)
    
    ret= {}
    if runinfo.status()==1: #running, ok
        runinfo.msg("Process starting at {0} (server time)".format(time.strftime("%c")))
        
        run(runinfo)
        RUNS[runinfo.session_id()] = runinfo #should we add a Lock ? theoretically unnecessary...
        ret = {'session_id':runinfo.session_id(), 'scenario_id':0}
    else:
        ret = {'error': runinfo.errormsg or "Unknown error (please contact the administrator)"}
    
    return response.tojson(ret)
Beispiel #2
0
def run_simulation(request, response):

    jsonData = request.json
    #parse advanced settings:


    #DO IT HERE, NOW PRIOR TO ANY CALCULATION!!!!
    #FIXME: HANDLE EXCEPTIONS!!!!!
    key_mcerpt_npts = gk.DNP
    mcerp.npts = glb.mcerp_npts if not key_mcerpt_npts in jsonData else glb.cast(key_mcerpt_npts, jsonData[key_mcerpt_npts])


    runinfo = RunInfo(jsonData)

    ret= {}
    if runinfo.status()==1: #running, ok
        runinfo.msg("Process starting at {0} (server time)".format(time.strftime("%c")))

        run(runinfo)
        RUNS[runinfo.session_id()] = runinfo #should we add a Lock ? theoretically unnecessary...
        ret = {'session_id':runinfo.session_id(), 'scenario_id':0}
    else:
        ret = {'error': runinfo.errormsg or "Unknown error (please contact the administrator)"}

    return response.tojson(ret)
Beispiel #3
0
    def __setitem__(self, key, value):

        params = glb.params

        k_low = key.lower()
        if k_low in params:
            p = params[k_low]

            value = glb.cast(p, value)

            #cast to db_val:
            if _scenario_name in p:
                self.__db[k_low] = val_db(k_low, p, value)
                self.__dbhash = None

            #cast for scenario (self):
            value = val_sc(k_low, p, value)

        super(Scenario, self).__setitem__(k_low, value)
Beispiel #4
0
 def __setitem__(self, key, value):
     
     params = glb.params
     
     k_low = key.lower()
     if k_low in params:
         p = params[k_low]
         
         value = glb.cast(p, value)
         
         #cast to db_val:
         if _scenario_name in p:
             self.__db[k_low] = val_db(k_low, p, value)
             self.__dbhash = None
             
         #cast for scenario (self):    
         value = val_sc(k_low, p, value)
         
     super(Scenario, self).__setitem__(k_low, value)
Beispiel #5
0
def fdsn_query(request, response):

    #when this is not a post request, print anyway the table. Therefore:
    try:
        query_url = ""
        try:
            form = request.post
            s = []
            catalog = ''
            for key in form.keys():
                l = form.getlist(key)
                if key == 'catalog':
                    catalog=l[0]
                else:
                    par = glb.params[key]
                    fdsn_name = par['fdsn_name']
                    istime = key == gk.TIM

                    if istime:
                        vmin = glb.cast(par,l[0])
                        vmax = glb.cast(par,l[1], round_ceil=True)

                        #fdsn format: 2014-12-07T01:22:03.2Z. Let's conver it
                        vmin = "start{0}={1:04d}-{2:02d}-{3:02d}T{4:02d}:{5:02d}:{6:02d}.{7:d}Z".format(fdsn_name,vmin.year, vmin.month, vmin.day, vmin.hour, vmin.minute, vmin.second,vmin.microsecond)
                        vmax = "end{0}={1:04d}-{2:02d}-{3:02d}T{4:02d}:{5:02d}:{6:02d}.{7:d}Z".format(fdsn_name,vmax.year, vmax.month, vmax.day, vmax.hour, vmax.minute, vmax.second,vmax.microsecond)
                    else:
                        vmin = "min{0}={1}".format(fdsn_name, str(glb.cast(par,l[0],dim=-1))) #-1: needs scalar
                        vmax = "max{0}={1}".format(fdsn_name, glb.cast(par,l[1],dim=-1)) #-1: needs scalar

                    s.append('{0}&{1}'.format(vmin, vmax))
            query_url = fe.FDSN_CATALOG[catalog]+ ('&'.join(s))
        except:pass

        #define here the ORDER of the columns!
        cols = ("EventLocationName","Time","Latitude","Longitude", "Depth", "Magnitude") #, "EventId")
        submittable_keys = {"Latitude": gk.LAT,"Longitude": gk.LON, "Depth": gk.DEP, "Magnitude": gk.MAG} #numeric are also submittable

        value = ""

        def esc(s, quote=True): return miniwsgi.escape(s, quote)

        def parse_depth(val):
            try:
                if val[0] is not None : val[0] /= 1000
                #if val[1] is not None : val[1] /= 1000 #depth uncertainty SEEMS in km!!!
            except:
                pass

        value = [] if not query_url else fe.get_events(query_url, _required_=fe.DEF_NUMERIC_FIELDS, _callback_={fe.F_DEPTH: parse_depth}) #getCaravanEvents(xmlurl)

        vals = StringIO()
        vals.write(request.urlbody)
        vals.write("<table class='fdsn'><thead class='title'><tr>\n")
        vals.write(''.join("<td data-sort='{0}'>{1}</td>".format('num' if v in submittable_keys else 'str', esc(v)) for v in cols))
        vals.write('\n</tr>\n</thead>')
        vals.write("<tbody>")

        for v in value:
            vals.write('<tr>')
            unc = {} if not 'Uncertainty' in v else v['Uncertainty']
            for k in cols:
                tdval = v[k]
                tdstr = str(tdval) if k!="Time" else str(tdval).replace("T"," ").replace("Z","")
                tdsubmit_value = tdstr
                tdsubmit_key = None
                if k in submittable_keys:
                    tdsubmit_key = submittable_keys[k]
                    if k in unc:
                        tdstr+=" &plusmn; " + str(unc[k])
                        pr = glb.params[tdsubmit_key]
                        if 'distrib' in pr:
                            dstr = pr['distrib'].lower()
                            tdsubmit_value = str(tdval) + " " + str(unc[k]/2) if dstr == 'normal' else str(tdval - unc[k]) + " " + str(tdval + unc[k])

                vals.write('<td')
                vals.write(' data-value="{}"'.format(esc(tdstr)))
                if tdsubmit_key: vals.write(' data-submit-key="{}" data-submit-value="{}"'.format(esc(tdsubmit_key), esc(tdsubmit_value)))
                vals.write('>{}</td>'.format(tdstr))
            vals.write('</tr>')
        vals.write("</tbody></table>")
        value = vals.getvalue()
        vals.close()

    except Exception as e:
        value = "<span class=error>"+esc(str(e))+"</span>"
        if CARAVAN_DEBUG:
            traceback.print_exc()

    s = StringIO()
    s.write(value)
    s.write("\n</body>\n</html>")
    v = s.getvalue()
    s.close()
#         if p == 'catalog':
#             s= cat[p].value + s
#         else
    return v
Beispiel #6
0
def fdsn_query(request, response):
    
    #when this is not a post request, print anyway the table. Therefore:
    try:
        query_url = ""
        try:
            form = request.post
            s = []
            catalog = ''
            for key in form.keys(): 
                l = form.getlist(key)
                if key == 'catalog':
                    catalog=l[0]
                else:
                    par = glb.params[key]
                    fdsn_name = par['fdsn_name']
                    istime = key == gk.TIM
                    
                    if istime:
                        vmin = glb.cast(par,l[0])
                        vmax = glb.cast(par,l[1], round_ceil=True)
                        
                        #fdsn format: 2014-12-07T01:22:03.2Z. Let's conver it
                        vmin = "start{0}={1:04d}-{2:02d}-{3:02d}T{4:02d}:{5:02d}:{6:02d}.{7:d}Z".format(fdsn_name,vmin.year, vmin.month, vmin.day, vmin.hour, vmin.minute, vmin.second,vmin.microsecond)
                        vmax = "end{0}={1:04d}-{2:02d}-{3:02d}T{4:02d}:{5:02d}:{6:02d}.{7:d}Z".format(fdsn_name,vmax.year, vmax.month, vmax.day, vmax.hour, vmax.minute, vmax.second,vmax.microsecond)
                    else:
                        vmin = "min{0}={1}".format(fdsn_name, str(glb.cast(par,l[0],dim=-1))) #-1: needs scalar
                        vmax = "max{0}={1}".format(fdsn_name, glb.cast(par,l[1],dim=-1)) #-1: needs scalar
                    
                    s.append('{0}&{1}'.format(vmin, vmax))
            query_url = fe.FDSN_CATALOG[catalog]+ ('&'.join(s))         
        except:pass   
        
        #define here the ORDER of the columns!
        cols = ("EventLocationName","Time","Latitude","Longitude", "Depth", "Magnitude") #, "EventId")
        submittable_keys = {"Latitude": gk.LAT,"Longitude": gk.LON, "Depth": gk.DEP, "Magnitude": gk.MAG} #numeric are also submittable
    
        value = ""
    
        def esc(s, quote=True): return miniwsgi.escape(s, quote)
        
        def parse_depth(val):
            try:
                if val[0] is not None : val[0] /= 1000
                #if val[1] is not None : val[1] /= 1000 #depth uncertainty SEEMS in km!!!
            except:
                pass
            
        value = [] if not query_url else fe.get_events(query_url, _required_=fe.DEF_NUMERIC_FIELDS, _callback_={fe.F_DEPTH: parse_depth}) #getCaravanEvents(xmlurl)
        
        vals = StringIO()
        vals.write(request.urlbody)        
        vals.write("<table class='fdsn'><thead class='title'><tr>\n")
        vals.write(''.join("<td data-sort='{0}'>{1}</td>".format('num' if v in submittable_keys else 'str', esc(v)) for v in cols))
        vals.write('\n</tr>\n</thead>')
        vals.write("<tbody>")

        for v in value:
            vals.write('<tr>')
            unc = {} if not 'Uncertainty' in v else v['Uncertainty']
            for k in cols:
                tdval = v[k]
                tdstr = str(tdval) if k!="Time" else str(tdval).replace("T"," ").replace("Z","")
                tdsubmit_value = tdstr
                tdsubmit_key = None
                if k in submittable_keys:
                    tdsubmit_key = submittable_keys[k]
                    if k in unc:
                        tdstr+=" &plusmn; " + str(unc[k])
                        pr = glb.params[tdsubmit_key]
                        if 'distrib' in pr:
                            dstr = pr['distrib'].lower()
                            tdsubmit_value = str(tdval) + " " + str(unc[k]/2) if dstr == 'normal' else str(tdval - unc[k]) + " " + str(tdval + unc[k])
                
                vals.write('<td')
                vals.write(' data-value="{}"'.format(esc(tdstr)))
                if tdsubmit_key: vals.write(' data-submit-key="{}" data-submit-value="{}"'.format(esc(tdsubmit_key), esc(tdsubmit_value)))
                vals.write('>{}</td>'.format(tdstr))
            vals.write('</tr>')
        vals.write("</tbody></table>") 
        value = vals.getvalue()
        vals.close()
        
    except Exception as e:
        value = "<span class=error>"+esc(str(e))+"</span>"
        if CARAVAN_DEBUG:
            traceback.print_exc()
    
    s = StringIO()
    s.write(value)
    s.write("\n</body>\n</html>")
    v = s.getvalue()
    s.close()
#         if p == 'catalog':
#             s= cat[p].value + s
#         else
    return v        
Beispiel #7
0
                         req_type='POST')
        data = json.loads(cont["content"])
        updated = data["seiscomp"]["lastUpdate"]

        for jsonData in data["seiscomp"]["events"]:
            jsonData.update({
                u'tess_ids': [1, 2, 3, 4, 5, 6, 7],
                u'eid': '%s' % jsonData["eventID"],
                u'ipe': 3,
                u'dep': jsonData["depth"],
                u'gm_only': False,
                u'str': u'90',
                u'mcerp_npts': 40
            })
            key_mcerpt_npts = gk.DNP
            mcerp.npts = glb.mcerp_npts if not key_mcerpt_npts in jsonData else glb.cast(
                key_mcerpt_npts, jsonData[key_mcerpt_npts])

            runinfo = RunInfo(jsonData)

            ret = {}
            if runinfo.status() == 1:  #running, ok
                runinfo.msg("Process starting at {0} (server time)".format(
                    time.strftime("%c")))

                try:
                    run(runinfo)
                except Exception, e:
                    print "Run-Error for event %s: %s" % (jsonData["eventID"],
                                                          str(e))

                RUNS[runinfo.session_id()] = runinfo