Changeset 3247


Ignore:
Timestamp:
21/01/08 13:25:46 (11 years ago)
Author:
domlowe
Message:

removing old csml route from routing.py

File:
1 edited

Legend:

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

    r3090 r3247  
    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') 
     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) 
     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 
    263364        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) 
    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          
     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.