Changeset 2930 for TI05-delivery


Ignore:
Timestamp:
05/10/07 14:45:54 (12 years ago)
Author:
domlowe
Message:

direct retrieval of data working, although request parameters not yet in line with 1.0.0

Location:
TI05-delivery/ows_framework/trunk/ows_server/ows_server
Files:
4 edited
2 moved

Legend:

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

    r2925 r2930  
    3434from ows_server.lib.ndgInterface import interface 
    3535from ows_server.models.wcs_CoverageDescription import CoverageDescription 
    36  
     36import paste 
    3737 
    3838import logging 
     
    190190                #If not a csml datset is some message from exist such as 'access denied' 
    191191                return Response(c.dataset) 
    192             return self._renderCapabilities('wcs1_0_capabilities') 
     192            return self._renderCapabilities('wcs1_0_0_Capabilities') 
    193193        except Exception, e: 
    194194            if isinstance(e, OWS_E.OwsError): 
     
    220220                self.features[ident]=feature 
    221221            c.covDescs=self._buildCoverageDescriptions() 
    222             r=render_response('wcs/wcs_DescribeCoverageResponse', format='xml') 
     222            r=render_response('wcs1_0_0_DescribeCoverageResponse', format='xml') 
    223223            r.headers['content-type'] = 'text/xml' 
    224224            return r 
     
    236236    @parameter('Identifier', required=True) 
    237237    @parameter('BoundingBox', required=True, validator=V.bbox_2or3d) 
    238     @parameter('TimeSequence',required=True, validator=V.iso8601_time) 
     238    @parameter('Time',required=True, validator=V.iso8601_time) 
    239239    @parameter('Format', possibleValues=['application/netcdf'], required=True) 
    240240    @parameter('Store', validator = V.boolean('Store')) 
     
    242242    #TODO some more parameters to add here 
    243243    # Dimension parameters Time, Elevation, etc. are handled separately 
    244     def GetCoverage(self, uri, version, format, identifier, boundingbox, timesequence, store=False, status=False): 
     244    def GetCoverage(self, uri, version, format, identifier, boundingbox, time, store=False, status=False): 
    245245        # Retrieve dataset and selected feature           
    246246        try: 
     
    261261            t=feature.getTimeAxis() 
    262262            print '%s %s %s'%(lon,lat,t) 
    263             if None in [lon, lat, time]: 
     263            if None in [lon, lat, t]: 
    264264                #TODO need to return a suitable wcs error. 
    265265                print 'warning, could not get correct axis info' 
     
    269269            sel[lat]=(boundingbox[1], boundingbox[3]) 
    270270            sel[lon]=(boundingbox[0], boundingbox[2]) 
    271             if  type(timesequence) is unicode: 
    272                 sel[t]=str(timesequence) 
    273             else: 
    274                 sel[t]=timesequence 
     271            if  type(time) is unicode: 
     272                sel[t]=str(time) 
     273            else: 
     274                sel[t]=time 
    275275             
    276276            #z is the 4th axis (eg height or pressure). 
     
    289289     
    290290            # Extract via CSML.subsetToGridSeries() 
    291              
    292             print 'SEL %s'%sel 
    293291            if store: 
    294292                #need to farm off to WPS 
     
    335333                    return r                                  
    336334            else:                 
    337                 #STORE = FALSE, STATUS therefore irrelevant, return Multipart Mime. 
    338                 netcdfFile=open(filename, 'r') 
    339                 c.hyperlink="cid:coverage.nc" 
    340                 xmlfile=render_response('wcs_getCoverageResponse', format='xml') 
    341                 xmlfile.headers['content-type'] = 'text/xml' 
    342                 multipart=self._createMultipartMime(xmlfile, netcdfFile)         
    343                 msg=multipart 
    344                 try: 
    345                     #0.9.6 
    346                     pylons.response.headers['Content-Type']='multipart' 
    347                     return pylons.response(content=msg) 
    348                 except: 
    349                     #0.9.5 
    350                     return Response(content=msg, mimetype='multipart')                      
     335                #STORE = FALSE, STATUS therefore irrelevant, return file 
     336                fileToReturn=open(filename, 'r') 
     337                if os.path.splitext(filename)[1]=='.nc': 
     338                    mType='application/cf-netcdf' 
     339                else: 
     340                    mType='application/unknown' 
     341                 #Differnce in how Content-Types are handled between pylons 0.9.5 and 0.9.6 
     342            try: 
     343                #0.9.6 
     344                pylons.response.headers['Content-Type']=mType                 
     345                pylons.response.headers['Content-Disposition'] = paste.httpheaders.CONTENT_DISPOSITION(attachment=True, filename=f) 
     346                return pylons.response(content=fileToReturn) 
     347            except: 
     348                #0.9.5                 
     349                r=Response(content=fileToReturn, mimetype=mType)      
     350                r.headers['Content-Disposition'] = paste.httpheaders.CONTENT_DISPOSITION(attachment=True, filename=f)                 
     351                return r 
    351352        except Exception, e: 
    352353            if isinstance(e, OWS_E.OwsError): 
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/controllers/csml_wcs1_1_0.py

    r2925 r2930  
    292292            # Extract via CSML.subsetToGridSeries() 
    293293             
    294             print 'SEL %s'%sel 
    295294            if store: 
    296295                #need to farm off to WPS 
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/controllers/csml_wcsx.py

    r2924 r2930  
    1010from ows_server.lib.base import * 
    1111from ows_server.lib.decorators import * 
    12 #import logging 
    13 #logger = logging.getLogger('ows_server.controllers.csml_wcsx') 
    1412 
    15 from paste.request import construct_url 
    1613 
    1714class CsmlWcsxController(OwsController): 
     
    1916     
    2017    def _getWCSurl(self,version): 
    21         #todo, may have to change the way this url is constructed to allow for apache forwarding 
     18        ''' given a wcs request and version get the correct url to forward to'''         
     19         
     20        #check config to see if proxy is being used 
     21        try: 
     22            hostname=request.environ['paste.config']['app_conf']['proxyname'] 
     23        except: 
     24            hostname=hostname=request.environ['HTTP_HOST']                     
     25         
     26        #called from within the other methods, which have already performed validation on the version parameter 
    2227        if version == '1.0.0': 
    23             u=construct_url(request.environ,request.environ['QUERY_STRING']) 
    24             u=u.replace('wcs','wcs1_0_0') 
     28            v='/wcs1_0_0/' 
    2529        elif version == '1.1.0': 
    26             u=construct_url(request.environ,request.environ['QUERY_STRING']) 
    27             u=u.replace('wcs','wcs1_1_0') 
     30            v='/wcs1_1_0/' 
     31  
     32        #construct url 
     33        u='http://'+hostname+v+str(request.environ['pylons.routes_dict']['uri'])+'?'+request.environ['QUERY_STRING']                 
    2834        return u 
    2935     
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/controllers/fetch.py

    r2850 r2930  
    5353            c.xml='<div class="error">%s</div>'%'<p> Access Denied </p><p>Not Logged in</p>' 
    5454            return render_response('error') 
    55  
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/templates/wcs1_0_0_DescribeCoverageResponse.kid

    r2917 r2930  
    11<?xml version="1.0" encoding="UTF-8"?> 
    2 <CoverageDescriptions xmlns:py="http://purl.org/kid/ns#" xmlns="http://www.opengis.net/wcs/1.1" 
    3 xmlns:ows="http://www.opengis.net/ows" 
    4 xmlns:owcs="http://www.opengis.net/wcs/1.1/ows" 
    5 xmlns:xlink="http://www.w3.org/1999/xlink" 
    6 xmlns:gml="http://www.opengis.net/gml" 
    7 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    8 xsi:schemaLocation="http://www.opengis.net/wcs/1.1 
    9 ../wcsDescribeCoverage.xsd http://www.opengis.net/wcs/1.1/ows 
    10 ../owsDataIdentification.xsd"> 
    11         <CoverageDescription py:for="cd in c.covDescs"> 
    12         <ows:Title py:if="cd.titles is not None" py:content="cd.titles"/>         
    13         <ows:Abstract py:if="cd.abstracts is not None" py:content="cd.abstracts"/>     
    14         <ows:Keywords py:if = "cd.keywords is not None" > 
    15             <ows:Keyword py:for="key in cd.keywords" py:content="key" />         
    16         </ows:Keywords> 
    17         <Identifier py:content="cd.identifier"/> 
    18         <Domain> 
    19             <SpatialDomain> 
    20                 <ows:BoundingBox py:for="bb in cd.boundingBoxes" crs="${bb.crs}"> 
    21                     <ows:LowerCorner>${bb.lowerCorner[0]}  ${bb.lowerCorner[1]}</ows:LowerCorner> 
    22                     <ows:UpperCorner>${bb.upperCorner[0]}  ${bb.upperCorner[1]}</ows:UpperCorner> 
    23                 </ows:BoundingBox> 
    24                 <GridCRS> 
    25                     <GridBaseCRS></GridBaseCRS> 
    26                     <GridType></GridType> 
    27                     <GridOrigin></GridOrigin> 
    28                     <GridOffsets></GridOffsets> 
    29                     <GridCS></GridCS> 
    30                 </GridCRS> 
    31             </SpatialDomain> 
    32             <TemporalDomain> 
    33                 <TimePeriod> 
     2<CoverageDescription xmlns:py="http://purl.org/kid/ns#" xmlns="http://www.opengis.net/wcs" 
     3    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wcs http://schemas.opengis.net/wcs/1.0.0/describeCoverage.xsd" 
     4    xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" 
     5    version="1.0.0"> 
     6       <CoverageOffering py:for="cd in c.covDescs"> 
     7        <name py:content="cd.identifier"/>         
     8        <label py:if="cd.titles is not None" py:content="cd.titles"/>         
     9        <description py:if="cd.abstracts is not None" py:content="cd.abstracts"/>     
     10        <Keywords py:if = "cd.keywords is not None" > 
     11            <Keyword py:for="key in cd.keywords" py:content="key" />         
     12        </Keywords> 
     13        <lonLatEnvelope py:for="bb in cd.boundingBoxes"> 
     14                    <gml:pos>${bb.lowerCorner[0]}  ${bb.lowerCorner[1]}</gml:pos> 
     15                    <gml:pos>${bb.upperCorner[0]}  ${bb.upperCorner[1]}</gml:pos> 
     16        </lonLatEnvelope> 
     17        <domainSet> 
     18            <spatialDomain> 
     19                <!--! TO DO - nD crs --> 
     20                <gml:Envelope py:for="bb in cd.boundingBoxes" crs="${bb.crs}"> 
     21                    <gml:pos>${bb.lowerCorner[0]}  ${bb.lowerCorner[1]}</gml:pos> 
     22                    <gml:pos>${bb.upperCorner[0]}  ${bb.upperCorner[1]}</gml:pos> 
     23                </gml:Envelope> 
     24            </spatialDomain> 
     25            <temporalDomain> 
     26                <timePeriod> 
    3427                    <beginTime>${cd.timeLimits[0]}</beginTime> 
    3528                    <endTime>${cd.timeLimits[1]}</endTime> 
    36                 </TimePeriod> 
    37             </TemporalDomain> 
    38         </Domain> 
    39         <Range> 
    40             <Field> 
    41             </Field> 
    42         </Range> 
    43         <SupportedCRS></SupportedCRS> 
    44         <SupportedFormat>application/CF-netcdf</SupportedFormat> 
    45     </CoverageDescription> 
    46 </CoverageDescriptions> 
     29                </timePeriod> 
     30            </temporalDomain> 
     31        </domainSet> 
     32        <rangeSet> 
     33            <TODO> 
     34            </TODO> 
     35        </rangeSet> 
     36        <supportedCRSs></supportedCRSs> 
     37        <supportedFormats> 
     38            <formats>application/CF-netcdf</formats> 
     39        </supportedFormats> 
     40        <supportedInterpolations> 
     41            <interpolationMethod>none</interpolationMethod> 
     42        </supportedInterpolations> 
     43    </CoverageOffering> 
     44</CoverageDescription> 
Note: See TracChangeset for help on using the changeset viewer.