Ignore:
Timestamp:
26/06/07 11:50:14 (12 years ago)
Author:
domlowe
Message:

Basic WPS-style polling implemented for asynchronous WCS

Location:
TI05-delivery/ows_framework/trunk/ows_server/ows_server
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/config/routing.py

    r2647 r2650  
    3232    map.connect(':file/wms', controller='csml_wms') 
    3333    map.connect(':file/wcs', controller='csml_wcs') 
     34    map.connect(':file/status/:jobID', controller='status', action='getStatus') 
    3435     
    3536    # following is the shell for the rest of the ndg  
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/controllers/csml_wcs.py

    r2648 r2650  
    1010 
    1111#NOTE, much of this is straight from WMS and needs to be overhauled. 
     12import os, string, StringIO 
    1213 
    1314from ows_server.lib.base import * 
     
    2324 
    2425from ows_server.lib.csml_util import get_csml_doc, extractToNetCDF 
    25 import os, StringIO 
     26 
    2627from email.mime.multipart import MIMEMultipart 
    2728from email.mime.base import MIMEBase 
    2829from email.mime.text import MIMEText 
    2930from email import encoders 
     31 
     32from ows_server.controllers.status import StatusController 
    3033 
    3134 
     
    3538        'ExceptionFormat': make_domain(['text/xml']), 
    3639        } 
    37  
    38     #_ows_constraints = { 
    39         # MaximumLayerLevels 
    40         # MaximumWidth 
    41         # MaximumWidth 
    42     #    } 
    4340 
    4441    def _createMultipartMime(self, xml, netcdf): 
     
    130127    @parameter('TimeSequence',required=True, validator=V.iso8601_time) 
    131128    @parameter('Format', possibleValues=['application/netcdf'], required=True) 
    132     @parameter('Store', possibleValues=['true', 'True', 'TRUE']) 
     129    @parameter('Store', validator = V.boolean('Store')) 
     130    @parameter('Status', validator = V.boolean('Status')) 
    133131    #TODO some more parameter to add here 
    134132    # Dimension parameters Time, Elevation, etc. are handled separately 
    135     def GetCoverage(self, file, version, format, identifier, boundingbox, timesequence, store=None): 
     133    def GetCoverage(self, file, version, format, identifier, boundingbox, timesequence, store=False, status=False): 
     134        try: 
    136135                    # Retrieve dataset and selected feature 
     136             
    137137            dataset = get_csml_doc(file) 
    138138            feature = dataset.getFeature(identifier) 
     
    145145             
    146146            # Extract via CSML.subsetToGridSeries() 
    147             if store is not None:  
     147            if store: 
    148148                filename = extractToNetCDF(feature, sel, publish=True) 
    149149            else: 
     
    151151             
    152152            #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. 
    153             if store is not None:  
    154                 #use the temp file name (minus extension) as an ID 
    155                 f=os.path.basename(filename) 
    156                 c.fileID=os.path.splitext(f)[0] 
    157                 c.hyperlink = 'http://'+request.environ['HTTP_HOST']+'/'+os.path.basename(request.environ['paste.config']['app_conf']['publish_dir'])+'/'+os.path.basename(filename) 
    158                 r=render_response('wcs_getCoverageResponse', format='xml') 
    159                 r.headers['content-type'] = 'text/xml' 
    160                 return r         
     153            if store: 
     154                if status: 
     155                    #STORE = true, STATUS = true: 
     156                    #hand off file "id" to StatusController to determine correct ExectuteResponse type response. 
     157                    status=StatusController() 
     158                    jobID=os.path.splitext(os.path.basename(filename)[9:])[0] #remove the 'csml_wxs_' prefix and file extension to create a jobID 
     159                    return status.getStatus(jobID)                    
     160                else: 
     161                    #STORE=true, STATUS = false: Return Coverage XML document with link to file. 
     162                    #use the temp file name (minus extension) as an ID 
     163                    f=os.path.basename(filename) 
     164                    c.fileID=os.path.splitext(f)[0] 
     165                    c.hyperlink = 'http://'+request.environ['HTTP_HOST']+'/'+os.path.basename(request.environ['paste.config']['app_conf']['publish_dir'])+'/'+os.path.basename(filename) 
     166                    r=render_response('wcs_getCoverageResponse', format='xml') 
     167                    r.headers['content-type'] = 'text/xml' 
     168                    return r                                  
    161169            else:                 
     170                #STORE = FALSE, STATUS therefore irrelevant, return Multipart Mime. 
    162171                netcdfFile=open(filename, 'r') 
    163172                xmlfile=render_response('wcs_getCoverageResponse', format='xml') 
     
    167176                #msg=open(multipart, 'r').readlines() 
    168177                return Response(content=msg, mimetype='multipart')  
    169          
    170         #try: 
    171  
    172              
    173         #except Exception, e: 
    174             #if isinstance(e, OWS_E.OwsError): 
    175                 #raise e 
    176             #else: 
    177                 #raise e 
    178                 ##raise OWS_E.NoApplicableCode(e) 
     178                   
     179        except Exception, e: 
     180            if isinstance(e, OWS_E.OwsError): 
     181                raise e 
     182            else: 
     183                raise OWS_E.NoApplicableCode(e) 
    179184         
    180185         
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/lib/validators.py

    r2644 r2650  
    129129 
    130130        raise InvalidParameterValue("Parameter must be boolean", param_name) 
    131  
    132131    return f 
Note: See TracChangeset for help on using the changeset viewer.