Changeset 2570


Ignore:
Timestamp:
11/06/07 12:35:08 (12 years ago)
Author:
spascoe
Message:

Many changes to implement Dimension elements in the Capabilities document.

Location:
TI05-delivery/ows_framework/trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • TI05-delivery/ows_framework/trunk/ows_common/ows_common/domain.py

    r2566 r2570  
    7171    VALUES_REFERENCE = 4 
    7272     
     73    def __init__(self, type, allowedValues=[], valuesRefName=None, 
     74                 valuesRefURI=None): 
     75        self.type = type 
     76        self.allowedValues = allowedValues 
     77        self.valuesRefName = valuesRefName 
     78        self.valuesRefURI = valuesRefURI 
     79 
    7380    # The union is implemented by providing a class method for each member. 
    7481    @classmethod 
    75     def anyValue(klass): 
    76         k = klass() 
    77         k.type = klass.ANY_VALUE 
     82    def fromAnyValue(klass): 
     83        k = klass(klass.ANY_VALUE) 
    7884        return k 
    7985 
    8086    @classmethod 
    81     def noValues(klass): 
    82         k = klass() 
    83         k.type = klass.NO_VALUES 
     87    def fromNoValues(klass): 
     88        k = klass(klass.NO_VALUES) 
    8489        return k 
    8590 
    8691    @classmethod 
    87     def allowedValues(klass, valueOrRanges): 
    88         k = klass() 
    89         k.type = klass.ALLOWED_VALUES 
    90         k.allowedValues = valueOrRanges 
     92    def fromAllowedValues(klass, valueOrRanges): 
     93        k = klass(klass.ALLOWED_VALUES, allowedValues=valueOrRanges) 
    9194        return k 
    9295 
    9396    @classmethod 
    94     def valuesReference(klass, name, uri): 
    95         k = klass() 
    96         k.type = klass.VALUES_REFERENCE 
    97         k.valuesRefName = name 
    98         k.valuesRefURI = uri 
     97    def fromValuesReference(klass, name, uri): 
     98        k = klass(klass.VALUES_REFERENCE, valuesRefName=name, valuesRefURI=uri) 
    9999        return k 
    100100 
  • TI05-delivery/ows_framework/trunk/ows_common/ows_common/util.py

    r2566 r2570  
    2121    """ 
    2222    if possibleValues is None: 
    23         pv = PossibleValues.anyValue() 
     23        pv = PossibleValues.fromAnyValue() 
    2424    elif isinstance(possibleValues, PossibleValues): 
    2525        pv = possibleValues 
    2626    else: 
    27         pv = PossibleValues.allowedValues(possibleValues) 
     27        pv = PossibleValues.fromAllowedValues(possibleValues) 
    2828 
    2929    return Domain(defaultValue=value, possibleValues=pv, **kwargs) 
  • TI05-delivery/ows_framework/trunk/ows_common/ows_common/wms.py

    r2552 r2570  
    1919    @ivar CRSs 
    2020    @type CRSs: iterable of str 
    21     @ivar styles 
     21    @ivar styles: Style descriptors, default [''] 
    2222    @type styles: iterable of Style objects 
    2323    @ivar dimensions 
     
    3939 
    4040    """ 
    41     def __init__(self, CRSs=[], styles=[], dimensions={}, attribution=None, authorityURLs=[], 
     41    def __init__(self, CRSs=[], styles=[''], dimensions={}, attribution=None, authorityURLs=[], 
    4242                 identifiers=[], dataURLs=[], featureListURLs=[], 
    4343                 minScaleDenominator=None, maxScaleDenominator=None, **kw): 
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/controllers/csml_wms.py

    r2564 r2570  
    1515 
    1616from ows_common import exceptions as OWS_E 
    17 from ows_common.contents import * 
     17from ows_common.wms import * 
     18from ows_common.common import BoundingBox 
     19from ows_common.domain import ValuesUnit 
    1820 
    1921from ows_server.lib.csml_util import get_csml_doc 
     
    3436 
    3537 
     38    def _load_feature_ds(self, feature): 
     39 
     40        dims = {} 
     41        #!WARNING 
     42        # This bit is a hack until the CSML API implements a mechanism 
     43        # to determine which elements of a domain are longitude and latitude. 
     44        for axis_name, axis in feature.getDomain().iteritems(): 
     45            if axis_name in ['longitude', 'latitude']: 
     46                continue 
     47            dims[axis_name] = make_domain(possibleValues=axis, 
     48                                          #!TODO: this is a fudge until we can deduce UOM. 
     49                                          valuesUnit=ValuesUnit(uoms=[''], 
     50                                                                referenceSystems=[''])) 
     51         
     52        return WmsDatasetSummary(identifier=feature.id, 
     53                                 titles=[feature.description.CONTENT], 
     54                                 boundingBoxes=[BoundingBox([-180,-90], [180,90], 
     55                                                            crs='CRS:84')], 
     56                                 dimensions=dims, 
     57                                  
     58                                 ) 
     59         
     60 
    3661    def _load_capabilities(self): 
    3762        """ 
     
    4368 
    4469        # For WMS 1.3.0 compatibility we need a single root DatasetSummary 
    45         ds = DatasetSummary(titles=['Root Dataset'], datasetSummaries=[]) 
     70        ds = WmsDatasetSummary(titles=['Root Dataset'], datasetSummaries=[], 
     71                               CRSs=['CRS:84']) 
    4672        # Add a DatasetSummary for each feature         
    4773        for f_n in c.dataset.getFeatureList(): 
    48             f = c.dataset.getFeature(f_n) 
    49             ds.datasetSummaries.append(DatasetSummary(identifier=f.id, 
    50                                                       titles=[f.description.CONTENT])) 
     74            feature_ds = self._load_feature_ds(c.dataset.getFeature(f_n)) 
     75            ds.datasetSummaries.append(feature_ds) 
    5176 
    5277        sm.contents = Contents(datasetSummaries=[ds]) 
     
    5782    @parameter('Format', possibleValues=['text/xml']) 
    5883    @parameter('Service', possibleValues=['WMS'], required=True) 
    59     @parameter('Version', possibleValues=['1.1.0']) 
     84    @parameter('Version', possibleValues=['1.3.0']) 
    6085    def GetCapabilities(self, file, service=None, version=None): 
    6186        """ 
     
    6590        """ 
    6691         
     92        # Populate the context object with information required by the template 
    6793        c.dataset = get_csml_doc(file) 
    68         c.service_metadata = self._load_capabilities() 
    6994 
    70         r = render_response('ows/wms_capabilities', format='xml') 
    71         r.headers['content-type'] = 'text/xml' 
    72         return r 
     95        return self._render_capabilities('ows/wms_capabilities') 
     96 
     97 
     98    @operation 
     99    @parameter('Version', possibleValues=['1.3.0'], required=True) 
     100    @parameter('Layers', required=True) 
     101    @parameter('Styles', required=True) 
     102    @parameter('CRS', possibleValues=['CRS:84'], required=True) 
     103    @parameter('Bbox', required=True) 
     104    @parameter('Width', required=True) 
     105    @parameter('Height', required=True) 
     106    @parameter('Format', required=True) 
     107    @parameter('Transparent') 
     108    @parameter('Bgcolor') 
     109    @parameter('Exceptions') 
     110    # Dimension parameters Time, Elevation, etc. are handled separately 
     111    def GetMap(self, version, layers, styles, crs, bbox, width, height, format, 
     112               transparent, bgcolor, exceptions): 
     113        pass 
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/lib/base.py

    r2564 r2570  
    5353        del self.ows_params['request'] 
    5454 
    55 ### This should be handled by the decorators now. 
    56 ##     def _get_method_args(self): 
    57 ##         """Extends Controller._get_method_args to retrieve arguments 
    58 ##         from the query string. 
    59      
    60 ##         See the docstring for Controller._get_method_args for details. 
    61  
    62 ##         """ 
    63  
    64 ##         # Get the method arguments and add the query string arguments 
    65 ##         kargs = WSGIController._get_method_args(self) 
    66 ##         kargs.update(self.ows_params) 
    67  
    68 ##         return kargs 
    69  
    7055    def _load_capabilities(self): 
    7156        """ 
     
    10691        return sm 
    10792 
     93    def _render_capabilities(self, template='ows/get_capabilities'): 
     94        """ 
     95        The standard way of returning a Capabilities document. 
     96 
     97        Each subclass should implement self._load_capabilities() and call 
     98        this method to return a response object. 
     99 
     100        """ 
     101        c.service_metadata = self._load_capabilities() 
     102 
     103        r = render_response(template, format='xml') 
     104        r.headers['content-type'] = 'text/xml' 
     105        return r 
     106 
     107 
    108108# Include the '_' function in the public names 
    109109__all__ = [__name for __name in locals().keys() if not __name.startswith('_') \ 
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/templates/ows/wms_capabilities.kid

    r2561 r2570  
    2424    return set_tag(opXML(op), opName) 
    2525 
    26 def bbox_attrs(bb): 
    27     """ 
    28     Returns an attribute dictionary for a BoundingBox() object. 
    29  
    30     @note: resx & resy not supported 
    31     """ 
    32     return dict(CRS=bb.get('crs'), 
    33                 minx=bb.lowerCorner[0], 
    34                 miny=bb.lowerCorner[1], 
    35                 maxx=bb.upperCorner[0], 
    36                 maxy=bb.upperCorner[1]) 
    3726 
    3827?> 
     
    7160    <!-- TODO CRS --> 
    7261    <BoundingBox py:for="bb in ds.boundingBoxes" 
    73                  py:attrs="bbox_attrs(bb)"/> 
     62                 CRS="${bb.crs}" 
     63                 minx="${bb.lowerCorner[0]}" 
     64                 miny="${bb.lowerCorner[1]}" 
     65                 maxx="${bb.upperCorner[0]}" 
     66                 maxy="${bb.upperCorner[1]}"/> 
     67 
    7468    <!-- TODO Attribution from metadata --> 
    7569    <!-- TODO AuthorityURL from metadata --> 
     
    8175    <!-- TODO MinScaleDenominator from metadata --> 
    8276    <!-- TODO MaxScaleDenominator from metadata --> 
     77 
     78    <!--!TODO handle units --> 
     79    <Dimension py:for="d_n, d in ds.dimensions.iteritems()" 
     80               name="${d_n}" 
     81               default="${d.defaultValue}" 
     82               units="${d.valuesUnit.uoms[0]}" 
     83               py:content="' '.join(d.possibleValues.allowedValues)"/> 
    8384 
    8485    <Layer py:for="ds1 in ds.datasetSummaries" py:replace="layer(ds1)"/> 
Note: See TracChangeset for help on using the changeset viewer.