Ignore:
Timestamp:
18/09/07 10:17:12 (12 years ago)
Author:
domlowe
Message:

replacing try except that should be there

File:
1 edited

Legend:

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

    r2889 r2891  
    250250    def GetCoverage(self, uri, version, format, identifier, boundingbox, timesequence, store=False, status=False): 
    251251        # Retrieve dataset and selected feature             
    252         #try: 
    253         rstatus,dataset=interface.GetParsedCSML(uri)                 
    254         if not rstatus:  
    255             c.xml='<div class="error">%s</div>'%dataset 
    256             resp=render_response('error') 
    257             return resp 
    258         feature = dataset.getFeature(identifier) 
    259         if feature is None: 
    260             raise OWS_E.InvalidParameterValue('Coverage not found', 'identifier') 
     252        try: 
     253            rstatus,dataset=interface.GetParsedCSML(uri)                 
     254            if not rstatus:  
     255                c.xml='<div class="error">%s</div>'%dataset 
     256                resp=render_response('error') 
     257                return resp 
     258            feature = dataset.getFeature(identifier) 
     259            if feature is None: 
     260                raise OWS_E.InvalidParameterValue('Coverage not found', 'identifier') 
     261             
     262                         
     263            #set bounding box  
     264             
     265            lon=feature.getLongitudeAxis() 
     266            lat=feature.getLatitudeAxis() 
     267            t=feature.getTimeAxis() 
     268            if None in [lon, lat, time]: 
     269                #TODO need to return a suitable wcs error. 
     270                print 'warning, could not get correct axis info' 
     271             
     272            #create selection dictionary: 
     273            sel={} 
     274            sel[lat]=(boundingbox[1], boundingbox[3]) 
     275            sel[lon]=(boundingbox[0], boundingbox[2]) 
     276            if  type(timesequence) is unicode: 
     277                sel[t]=str(timesequence) 
     278            else: 
     279                sel[t]=timesequence 
     280             
     281            #z is the 4th axis (eg height or pressure). 
     282            #NOTE, need to decide whether bounding box is of form: x1,y1,z1,x2,y2,z2 or x1,y1,x2,y2,z1,z2 
     283            #currently the latter is implemented.  
     284             
     285            if len(boundingbox)  == 6: 
     286                for ax in feature.getAxisLabels(): 
     287                    if ax not in [lat, lon, t]: 
     288                        #must be Z   
     289                        z=str(ax) 
     290                        sel[z]=(boundingbox[4], boundingbox[5]) 
     291             
     292             
     293            axisNames=feature.getAxisLabels() 
     294     
     295            # Extract via CSML.subsetToGridSeries() 
     296            if store: 
     297                #need to farm off to WPS 
     298                #but for now... 
     299                filename = extractToNetCDF(feature, sel, publish = True)  
     300            else: 
     301                filename = extractToNetCDF(feature, sel) 
    261302         
    262                      
    263         #set bounding box  
    264          
    265         lon=feature.getLongitudeAxis() 
    266         lat=feature.getLatitudeAxis() 
    267         t=feature.getTimeAxis() 
    268         if None in [lon, lat, time]: 
    269             #TODO need to return a suitable wcs error. 
    270             print 'warning, could not get correct axis info' 
    271          
    272         #create selection dictionary: 
    273         sel={} 
    274         sel[lat]=(boundingbox[1], boundingbox[3]) 
    275         sel[lon]=(boundingbox[0], boundingbox[2]) 
    276         if  type(timesequence) is unicode: 
    277             sel[t]=str(timesequence) 
    278         else: 
    279             sel[t]=timesequence 
    280          
    281         #z is the 4th axis (eg height or pressure). 
    282         #NOTE, need to decide whether bounding box is of form: x1,y1,z1,x2,y2,z2 or x1,y1,x2,y2,z1,z2 
    283         #currently the latter is implemented.  
    284          
    285         if len(boundingbox)  == 6: 
    286             for ax in feature.getAxisLabels(): 
    287                 if ax not in [lat, lon, t]: 
    288                     #must be Z   
    289                     z=str(ax) 
    290                     sel[z]=(boundingbox[4], boundingbox[5]) 
     303                 
     304            #use the randomly allocated filename as a basis for an identifier            
     305            f=os.path.basename(filename) 
     306            c.fileID=os.path.splitext(f)[0] 
     307             
     308            #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. 
     309                         
     310            if store: 
     311                if status: 
     312                    #STORE = true, STATUS = true: 
     313                    #hand off file "id" to StatusController to determine correct ExectuteResponse type response. 
     314                    status=StatusController() 
     315                    jobID=os.path.splitext(os.path.basename(filename)[9:])[0] #remove the 'csml_wxs_' prefix and file extension to create a jobID 
     316                    return status.getStatus(jobID)                    
     317                else: 
     318                    #STORE=true, STATUS = false: Return Coverage XML document with link to file. 
     319                    #use the temp file name (minus extension) as an ID 
     320                    c.hyperlink = 'http://'+request.environ['HTTP_HOST']+'/'+os.path.basename(request.environ['paste.config']['app_conf']['publish_dir'])+'/'+os.path.basename(filename) 
     321                    r=render_response('wcs_getCoverageResponse', format='xml') 
     322                    r.headers['content-type'] = 'text/xml' 
     323                    #write ndgSec to text file and store with coverage file: 
     324                    textName=request.environ['paste.config']['app_conf']['publish_dir']+'/'+os.path.splitext(os.path.basename(filename))[0]+'.txt' 
     325                    secText=open(textName, 'w') 
     326                    if 'ndgSec' in session: 
     327                        username=str(session['ndgSec']['u']) 
     328                        securityinfo=username 
     329                    else: 
     330                        securityinfo='No Security' 
     331                    secText.write(securityinfo) 
     332                    secText.close()                   
     333                    return r                                  
     334            else:                 
     335                #STORE = FALSE, STATUS therefore irrelevant, return Multipart Mime. 
     336                netcdfFile=open(filename, 'r') 
     337                c.hyperlink="cid:coverage.nc" 
     338                xmlfile=render_response('wcs_getCoverageResponse', format='xml') 
     339                xmlfile.headers['content-type'] = 'text/xml' 
     340                multipart=self._createMultipartMime(xmlfile, netcdfFile)         
     341                msg=multipart 
     342                try: 
     343                    #0.9.6 
     344                    pylons.response.headers['Content-Type']='multipart' 
     345                    return pylons.response(content=msg) 
     346                except: 
     347                    #0.9.5 
     348                    return Response(content=msg, mimetype='multipart')                      
     349        except Exception, e: 
     350            if isinstance(e, OWS_E.OwsError): 
     351               raise e 
     352            elif isinstance(e, ValueError): 
     353                if e.message == '<p> Access Denied </p><p>Not Logged in</p>': 
     354                    c.msg=e.message 
     355                    #h.redirect_to('/login')   
     356                    return render_response('wcs_accessDenied', mimetype ='text/html') 
     357                else: 
     358                    raise OWS_E.NoApplicableCode(e) 
     359            else: 
     360               raise OWS_E.NoApplicableCode(e) 
    291361         
    292362         
    293         axisNames=feature.getAxisLabels() 
    294  
    295         # Extract via CSML.subsetToGridSeries() 
    296         if store: 
    297             #need to farm off to WPS 
    298             #but for now... 
    299             filename = extractToNetCDF(feature, sel, publish = True)  
    300         else: 
    301             filename = extractToNetCDF(feature, sel) 
    302      
    303              
    304         #use the randomly allocated filename as a basis for an identifier            
    305         f=os.path.basename(filename) 
    306         c.fileID=os.path.splitext(f)[0] 
    307          
    308         #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. 
    309                      
    310         if store: 
    311             if status: 
    312                 #STORE = true, STATUS = true: 
    313                 #hand off file "id" to StatusController to determine correct ExectuteResponse type response. 
    314                 status=StatusController() 
    315                 jobID=os.path.splitext(os.path.basename(filename)[9:])[0] #remove the 'csml_wxs_' prefix and file extension to create a jobID 
    316                 return status.getStatus(jobID)                    
    317             else: 
    318                 #STORE=true, STATUS = false: Return Coverage XML document with link to file. 
    319                 #use the temp file name (minus extension) as an ID 
    320                 c.hyperlink = 'http://'+request.environ['HTTP_HOST']+'/'+os.path.basename(request.environ['paste.config']['app_conf']['publish_dir'])+'/'+os.path.basename(filename) 
    321                 r=render_response('wcs_getCoverageResponse', format='xml') 
    322                 r.headers['content-type'] = 'text/xml' 
    323                 #write ndgSec to text file and store with coverage file: 
    324                 textName=request.environ['paste.config']['app_conf']['publish_dir']+'/'+os.path.splitext(os.path.basename(filename))[0]+'.txt' 
    325                 secText=open(textName, 'w') 
    326                 if 'ndgSec' in session: 
    327                     username=str(session['ndgSec']['u']) 
    328                     securityinfo=username 
    329                 else: 
    330                     securityinfo='No Security' 
    331                 secText.write(securityinfo) 
    332                 secText.close()                   
    333                 return r                                  
    334         else:                 
    335             #STORE = FALSE, STATUS therefore irrelevant, return Multipart Mime. 
    336             netcdfFile=open(filename, 'r') 
    337             c.hyperlink="cid:coverage.nc" 
    338             xmlfile=render_response('wcs_getCoverageResponse', format='xml') 
    339             xmlfile.headers['content-type'] = 'text/xml' 
    340             multipart=self._createMultipartMime(xmlfile, netcdfFile)         
    341             msg=multipart 
    342             try: 
    343                 #0.9.6 
    344                 pylons.response.headers['Content-Type']='multipart' 
    345                 return pylons.response(content=msg) 
    346             except: 
    347                 #0.9.5 
    348                 return Response(content=msg, mimetype='multipart')                      
    349         #except Exception, e: 
    350             #if isinstance(e, OWS_E.OwsError): 
    351                #raise e 
    352             #elif isinstance(e, ValueError): 
    353                 #if e.message == '<p> Access Denied </p><p>Not Logged in</p>': 
    354                     #c.msg=e.message 
    355                     ##h.redirect_to('/login')   
    356                     #return render_response('wcs_accessDenied', mimetype ='text/html') 
    357                 #else: 
    358                     #raise OWS_E.NoApplicableCode(e) 
    359             #else: 
    360                #raise OWS_E.NoApplicableCode(e) 
    361          
    362          
Note: See TracChangeset for help on using the changeset viewer.