Changeset 2578 for TI05-delivery


Ignore:
Timestamp:
12/06/07 11:49:01 (12 years ago)
Author:
spascoe
Message:

Validators provide a mechanism for type checking operation parameters.
This is slightly at odds with the Domain.isValidValue() way of doing
things: something that will need resolving eventually.

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

Legend:

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

    r2570 r2578  
    120120    """ 
    121121    def __init__(self, multipleValues=False, nearestValue=False, 
    122                  current=False, *kw): 
     122                 current=False, **kw): 
    123123        super(Dimension, self).__init__(**kw) 
    124124         
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/controllers/csml_wms.py

    r2577 r2578  
    1111from ows_server.controllers.csml_api import get_csml_doc 
    1212from ows_server.lib.decorators import * 
     13import ows_server.lib.validators as V 
    1314 
    1415from elementtree import ElementTree as ET 
     
    2021 
    2122from ows_server.lib.csml_util import get_csml_doc 
     23import ows_server.lib.validators as V 
    2224 
    2325 
     
    4446            if axis_name in ['longitude', 'latitude']: 
    4547                continue 
    46             dims[axis_name] = Domain(possibleValues=PossibleValues.fromAllowedValues(axis), 
    47                                      #!TODO: this is a fudge until we can deduce UOM. 
    48                                      valuesUnit=ValuesUnit(uoms=[''], 
    49                                                            referenceSystems=[''])) 
     48            dims[axis_name] = Dimension(possibleValues=PossibleValues.fromAllowedValues(axis), 
     49                                        #!TODO: this is a fudge until we can deduce UOM. 
     50                                        valuesUnit=ValuesUnit(uoms=[''], 
     51                                                              referenceSystems=[''])) 
    5052        return dims 
    5153 
     
    99101    @operation 
    100102    @parameter('Version', possibleValues=['1.3.0'], required=True) 
    101     @parameter('Layers', required=True) 
     103    @parameter('Layers', required=True, validator=V.single_layer) 
    102104    @parameter('Styles', required=True) 
    103105    @parameter('CRS', possibleValues=['CRS:84'], required=True) 
    104     @parameter('Bbox', required=True) 
    105     @parameter('Width', required=True) 
    106     @parameter('Height', required=True) 
     106    @parameter('Bbox', required=True, validator=V.bbox_2d) 
     107    @parameter('Width', required=True, validator=V.integer('Width', 0, 640)) 
     108    @parameter('Height', required=True, validator=V.integer('Height', 0, 320)) 
    107109    @parameter('Format', required=True) 
    108     @parameter('Transparent') 
     110    @parameter('Transparent', validator=V.boolean('Transparent')) 
    109111    @parameter('Bgcolor') 
    110112    @parameter('Exceptions') 
    111113    # Dimension parameters Time, Elevation, etc. are handled separately 
    112     def GetMap(self, version, layers, styles, crs, bbox, width, height, format, 
    113                transparent, bgcolor, exceptions): 
     114    def GetMap(self, file, version, layers, styles, crs, bbox, width, height, format, 
     115               transparent=False, bgcolor=None, exceptions=None): 
    114116 
    115117        dataset = get_csml_doc(file) 
    116118 
    117         # Support a single layer only 
    118         layer_list = layers.split(',') 
    119         if len(layer_list) > 1: 
    120             raise OWS_E.InvalidParameterValue('Only one layer supported per request', 'layers') 
    121  
     119        return Response('Operation done') 
    122120         
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/lib/decorators.py

    r2566 r2578  
    5656            try: 
    5757                param_l = param.lower() 
    58                 kw[param_l] = value = self.ows_params[param_l] 
     58                value = self.ows_params[param_l] 
    5959            except KeyError: 
    6060                if param in wrapper._ows_required_parameters: 
     
    6565                if not domain.isValidValue(value): 
    6666                    raise InvalidParameterValue('%s is not a valid value for %s' % (value, param), param) 
     67                # Use validator function if present 
     68                if param in wrapper._ows_validators: 
     69                    value = wrapper._ows_validators[param](value) 
     70 
     71                # Set value in kw dict 
     72                kw[param_l] = value 
    6773                 
    6874        return method(self, **kw) 
     
    7379    wrapper._ows_constraints = getattr(method, '_ows_constraints', {}) 
    7480    wrapper._ows_required_parameters = getattr(method, '_ows_required_parameters', [])         
     81    wrapper._ows_validators = getattr(method, '_ows_validators', {}) 
    7582 
    7683    return wrapper 
     
    7885 
    7986def parameter(name, value=None, possibleValues=None, 
    80               meaning=None, dataType=None, valuesUnit=None, required=False): 
     87              meaning=None, dataType=None, valuesUnit=None, required=False, 
     88              validator=None): 
    8189    """ 
    8290    A decorator to add a parameter to an operation. 
     
    8795        PossibleValues instance. 
    8896    @param required: A boolean that indicates whether to raise an exception if the parameter 
    89        is missing. 
     97        is missing. 
     98    @param validator: If not None this is a function which is called to validate operation 
     99        parameters.  It takes the parameter value string as it's only argument and returns 
     100        a parsed version of the value or raises an OWS exception. 
    90101     
    91102    """ 
    92103    def d(method): 
    93104        method._ows_parameters = getattr(method, '_ows_parameters', {}) 
     105        method._ows_validators = getattr(method, '_ows_validators', {}) 
    94106        method._ows_parameters[name] = make_domain(value=value, 
    95107                                                 possibleValues=possibleValues, 
     
    100112        if required: 
    101113            method._ows_required_parameters.append(name) 
     114        if validator: 
     115            method._ows_validators[name] = validator 
    102116             
    103117        return method 
Note: See TracChangeset for help on using the changeset viewer.