Changeset 3248


Ignore:
Timestamp:
21/01/08 13:29:01 (12 years ago)
Author:
domlowe
Message:

reverting last commit

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/controllers/csml_wcs1_0_0.py

    r3247 r3248  
    261261        identifier=coverage 
    262262        boundingbox=bbox  
    263         #try: 
    264         rstatus,dataset=interface.GetParsedCSML(uri)                 
    265         if not rstatus:  
    266             c.xml='<div class="error">%s</div>'%dataset 
    267             resp=render_response('error') 
    268             return resp 
    269         feature = dataset.getFeature(identifier) 
    270         if feature is None: 
    271             raise OWS_E.InvalidParameterValue('Coverage not found', 'identifier') 
     263        try: 
     264            rstatus,dataset=interface.GetParsedCSML(uri)                 
     265            if not rstatus:  
     266                c.xml='<div class="error">%s</div>'%dataset 
     267                resp=render_response('error') 
     268                return resp 
     269            feature = dataset.getFeature(identifier) 
     270            if feature is None: 
     271                raise OWS_E.InvalidParameterValue('Coverage not found', 'identifier') 
     272             
     273                         
     274            #set bounding box  
     275             
     276            lon=feature.getLongitudeAxis() 
     277            lat=feature.getLatitudeAxis() 
     278            t=feature.getTimeAxis() 
     279            if None in [lon, lat, t]: 
     280                #TODO need to return a suitable wcs error. 
     281                print 'warning, could not get correct axis info' 
     282                #best guess! 
     283                if t is None: 
     284                    t='time' 
     285                if lon is None: 
     286                    lon = 'longitude' 
     287                if lat is None: 
     288                    lat = 'latitude' 
     289            #create selection dictionary: 
     290            sel={} 
     291            sel[lat]=(boundingbox[1], boundingbox[3]) 
     292            sel[lon]=(boundingbox[0], boundingbox[2]) 
     293            if time is not None: 
     294                if  type(time) is unicode: 
     295                    sel[t]=str(time) 
     296                else: 
     297                    sel[t]=time 
     298            #z is the 4th axis (eg height or pressure). 
     299            #NOTE, need to decide whether bounding box is of form: x1,y1,z1,x2,y2,z2 or x1,y1,x2,y2,z1,z2 
     300            #currently the latter is implemented.  
     301             
     302            if len(boundingbox)  == 6: 
     303                for ax in feature.getAxisLabels(): 
     304                    if ax not in [lat, lon, t]: 
     305                        #must be Z   
     306                        z=str(ax) 
     307                        sel[z]=(boundingbox[4], boundingbox[5]) 
     308             
     309             
     310            axisNames=feature.getAxisLabels() 
     311     
     312                # Extract via CSML.subsetToGridSeries() 
     313            if store: 
     314                #need to farm off to WPS 
     315                #but for now... 
     316                filename = extractToNetCDF(feature, sel, publish = True)  
     317            else: 
     318                filename = extractToNetCDF(feature, sel) 
    272319         
    273                      
    274         #set bounding box  
    275          
    276         lon=feature.getLongitudeAxis() 
    277         lat=feature.getLatitudeAxis() 
    278         t=feature.getTimeAxis() 
    279         if None in [lon, lat, t]: 
    280             #TODO need to return a suitable wcs error. 
    281             print 'warning, could not get correct axis info' 
    282             #best guess! 
    283             if t is None: 
    284                 t='time' 
    285             if lon is None: 
    286                 lon = 'longitude' 
    287             if lat is None: 
    288                 lat = 'latitude' 
    289         #create selection dictionary: 
    290         sel={} 
    291         sel[lat]=(boundingbox[1], boundingbox[3]) 
    292         sel[lon]=(boundingbox[0], boundingbox[2]) 
    293         if time is not None: 
    294             if  type(time) is unicode: 
    295                 sel[t]=str(time) 
     320                 
     321            #use the randomly allocated filename as a basis for an identifier            
     322            f=os.path.basename(filename) 
     323            c.fileID=os.path.splitext(f)[0] 
     324             
     325            #Depending on if the 'store' parameter is set, either return the netcdf file + coverage xml as a multipart mime or return a coverage document containing a link. 
     326                         
     327            if store: 
     328                if status: 
     329                    #STORE = true, STATUS = true: 
     330                    #hand off file "id" to StatusController to determine correct ExectuteResponse type response. 
     331                    status=StatusController() 
     332                    jobID=os.path.splitext(os.path.basename(filename)[9:])[0] #remove the 'csml_wxs_' prefix and file extension to create a jobID 
     333                    return status.getStatus(jobID)                    
     334                else: 
     335                    #STORE=true, STATUS = false: Return Coverage XML document with link to file. 
     336                    #use the temp file name (minus extension) as an ID 
     337     
     338                    try: 
     339                        hostname=request.environ['paste.config']['app_conf']['proxyname'] 
     340                    except: 
     341                        hostname=hostname=request.environ['HTTP_HOST']                     
     342                    c.hyperlink ='http://'+hostname+'/'+os.path.basename(request.environ['paste.config']['app_conf']['publish_dir'])+'/'+os.path.basename(filename) 
     343                    r=render_response('wcs_getCoverageResponse', format='xml') 
     344                    r.headers['content-type'] = 'text/xml' 
     345                    #write ndgSec to text file and store with coverage file: 
     346                    textName=request.environ['paste.config']['app_conf']['publish_dir']+'/'+os.path.splitext(os.path.basename(filename))[0]+'.txt' 
     347                    secText=open(textName, 'w') 
     348                    if 'ndgSec' in session: 
     349                        username=str(session['ndgSec']['u']) 
     350                        securityinfo=username 
     351                    else: 
     352                        securityinfo='No Security' 
     353                    secText.write(securityinfo) 
     354                    secText.close()                   
     355                    return r                                  
     356            else:                 
     357                #STORE = FALSE, STATUS therefore irrelevant, return file 
     358                fileToReturn=open(filename, 'r') 
     359                if os.path.splitext(filename)[1]=='.nc': 
     360                    mType='application/cf-netcdf' 
     361                else: 
     362                    mType='application/unknown' 
     363                    #Differnce in how Content-Types are handled between pylons 0.9.5 and 0.9.6 
     364            try: 
     365                #0.9.6 
     366                pylons.response.headers['Content-Type']=mType                 
     367                pylons.response.headers['Content-Disposition'] = paste.httpheaders.CONTENT_DISPOSITION(attachment=True, filename=f) 
     368                return pylons.response(content=fileToReturn) 
     369            except: 
     370                #0.9.5                 
     371                r=Response(content=fileToReturn, mimetype=mType)      
     372                r.headers['Content-Disposition'] = paste.httpheaders.CONTENT_DISPOSITION(attachment=True, filename=f)                 
     373                return r 
     374        except Exception, e: 
     375            if isinstance(e, OWS_E.OwsError): 
     376                c.ex=e.report                 
     377                r=render_response('ogc_se', format='xml') 
     378                #r.headers['content-type'] = 'text/xml' 
     379                r.headers['content-type'] = 'application/vnd.ogc.se_xml' 
     380                return r 
     381            elif isinstance(e, ValueError): 
     382                c.xml='<div class="error">%s</div>'%e 
     383                return render_response('error') 
    296384            else: 
    297                 sel[t]=time 
    298         #z is the 4th axis (eg height or pressure). 
    299         #NOTE, need to decide whether bounding box is of form: x1,y1,z1,x2,y2,z2 or x1,y1,x2,y2,z1,z2 
    300         #currently the latter is implemented.  
    301          
    302         if len(boundingbox)  == 6: 
    303             for ax in feature.getAxisLabels(): 
    304                 if ax not in [lat, lon, t]: 
    305                     #must be Z   
    306                     z=str(ax) 
    307                     sel[z]=(boundingbox[4], boundingbox[5]) 
     385               raise OWS_E.NoApplicableCode(e) 
    308386         
    309387         
    310         axisNames=feature.getAxisLabels() 
    311  
    312             # Extract via CSML.subsetToGridSeries() 
    313         if store: 
    314             #need to farm off to WPS 
    315             #but for now... 
    316             filename = extractToNetCDF(feature, sel, publish = True)  
    317         else: 
    318             filename = extractToNetCDF(feature, sel) 
    319      
    320              
    321         #use the randomly allocated filename as a basis for an identifier            
    322         f=os.path.basename(filename) 
    323         c.fileID=os.path.splitext(f)[0] 
    324          
    325         #Depending on if the 'store' parameter is set, either return the netcdf file + coverage xml as a multipart mime or return a coverage document containing a link. 
    326                      
    327         if store: 
    328             if status: 
    329                 #STORE = true, STATUS = true: 
    330                 #hand off file "id" to StatusController to determine correct ExectuteResponse type response. 
    331                 status=StatusController() 
    332                 jobID=os.path.splitext(os.path.basename(filename)[9:])[0] #remove the 'csml_wxs_' prefix and file extension to create a jobID 
    333                 return status.getStatus(jobID)                    
    334             else: 
    335                 #STORE=true, STATUS = false: Return Coverage XML document with link to file. 
    336                 #use the temp file name (minus extension) as an ID 
    337  
    338                 try: 
    339                     hostname=request.environ['paste.config']['app_conf']['proxyname'] 
    340                 except: 
    341                     hostname=hostname=request.environ['HTTP_HOST']                     
    342                 c.hyperlink ='http://'+hostname+'/'+os.path.basename(request.environ['paste.config']['app_conf']['publish_dir'])+'/'+os.path.basename(filename) 
    343                 r=render_response('wcs_getCoverageResponse', format='xml') 
    344                 r.headers['content-type'] = 'text/xml' 
    345                 #write ndgSec to text file and store with coverage file: 
    346                 textName=request.environ['paste.config']['app_conf']['publish_dir']+'/'+os.path.splitext(os.path.basename(filename))[0]+'.txt' 
    347                 secText=open(textName, 'w') 
    348                 if 'ndgSec' in session: 
    349                     username=str(session['ndgSec']['u']) 
    350                     securityinfo=username 
    351                 else: 
    352                     securityinfo='No Security' 
    353                 secText.write(securityinfo) 
    354                 secText.close()                   
    355                 return r                                  
    356         else:                 
    357             #STORE = FALSE, STATUS therefore irrelevant, return file 
    358             fileToReturn=open(filename, 'r') 
    359             if os.path.splitext(filename)[1]=='.nc': 
    360                 mType='application/cf-netcdf' 
    361             else: 
    362                 mType='application/unknown' 
    363                 #Differnce in how Content-Types are handled between pylons 0.9.5 and 0.9.6 
    364         try: 
    365             #0.9.6 
    366             pylons.response.headers['Content-Type']=mType                 
    367             pylons.response.headers['Content-Disposition'] = paste.httpheaders.CONTENT_DISPOSITION(attachment=True, filename=f) 
    368             return pylons.response(content=fileToReturn) 
    369         except: 
    370             #0.9.5                 
    371             r=Response(content=fileToReturn, mimetype=mType)      
    372             r.headers['Content-Disposition'] = paste.httpheaders.CONTENT_DISPOSITION(attachment=True, filename=f)                 
    373             return r 
    374         #except Exception, e: 
    375             #if isinstance(e, OWS_E.OwsError): 
    376                 #c.ex=e.report                 
    377                 #r=render_response('ogc_se', format='xml') 
    378                 ##r.headers['content-type'] = 'text/xml' 
    379                 #r.headers['content-type'] = 'application/vnd.ogc.se_xml' 
    380                 #return r 
    381             #elif isinstance(e, ValueError): 
    382                 #c.xml='<div class="error">%s</div>'%e 
    383                 #return render_response('error') 
    384             #else: 
    385                #raise OWS_E.NoApplicableCode(e) 
    386          
    387          
Note: See TracChangeset for help on using the changeset viewer.