Changeset 2648


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

WCS now returns multipart MIME type or Coverages XML doc

File:
1 edited

Legend:

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

    r2644 r2648  
    2323 
    2424from ows_server.lib.csml_util import get_csml_doc, extractToNetCDF 
    25 import os 
     25import os, StringIO 
     26from email.mime.multipart import MIMEMultipart 
     27from email.mime.base import MIMEBase 
     28from email.mime.text import MIMEText 
     29from email import encoders 
    2630 
    2731 
     
    3842    #    } 
    3943 
     44    def _createMultipartMime(self, xml, netcdf): 
     45        #returns a multipart mime file containing the coverage xml + a netcdf file 
     46         
     47        # Create the container (outer) email message. 
     48        msg = MIMEMultipart() 
     49         
     50        #add the XML part 
     51        submsg=MIMEText(StringIO.StringIO(xml).read(), _subtype='xml') 
     52        msg.attach(submsg) 
     53 
     54         
     55        #add the NetCDF part 
     56        submsg= MIMEBase('application', 'netcdf') 
     57        submsg.set_payload(netcdf.read()) 
     58        netcdf.close() 
     59        # Encode the payload using Base64 
     60        encoders.encode_base64(submsg) 
     61        msg.attach(submsg) 
     62         
     63        #return the message 
     64        return msg 
     65         
    4066 
    4167    def _loadFeatureDimensions(self, feature): 
     
    108134    # Dimension parameters Time, Elevation, etc. are handled separately 
    109135    def GetCoverage(self, file, version, format, identifier, boundingbox, timesequence, store=None): 
    110         try: 
    111             # Retrieve dataset and selected feature 
     136                    # Retrieve dataset and selected feature 
    112137            dataset = get_csml_doc(file) 
    113138            feature = dataset.getFeature(identifier) 
     
    125150                filename = extractToNetCDF(feature, sel) 
    126151             
    127             #Depending on if the 'store' parameter is set, either return the netcdf file or a link to it. 
     152            #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. 
    128153            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] 
    129157                c.hyperlink = 'http://'+request.environ['HTTP_HOST']+'/'+os.path.basename(request.environ['paste.config']['app_conf']['publish_dir'])+'/'+os.path.basename(filename) 
    130                 c.wcs_request=request.environ['HTTP_REFERER'] 
    131                 return render_response('wcs_asynchronous') 
     158                r=render_response('wcs_getCoverageResponse', format='xml') 
     159                r.headers['content-type'] = 'text/xml' 
     160                return r         
    132161            else:                 
    133162                netcdfFile=open(filename, 'r') 
    134                 return Response(content=netcdfFile, mimetype='image/netcdf')     
    135         except Exception, e: 
    136             if isinstance(e, OWS_E.OwsError): 
    137                 raise e 
    138             else: 
    139                 raise e 
    140                 #raise OWS_E.NoApplicableCode(e) 
     163                xmlfile=render_response('wcs_getCoverageResponse', format='xml') 
     164                xmlfile.headers['content-type'] = 'text/xml' 
     165                multipart=self._createMultipartMime(xmlfile, netcdfFile)         
     166                msg=multipart 
     167                #msg=open(multipart, 'r').readlines() 
     168                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) 
    141179         
    142180         
Note: See TracChangeset for help on using the changeset viewer.