diff --git a/pywps/inout/inputs.py b/pywps/inout/inputs.py index 559ba19cc..0ac62a779 100644 --- a/pywps/inout/inputs.py +++ b/pywps/inout/inputs.py @@ -288,6 +288,7 @@ def json(self): 'data_type': self.data_type, 'workdir': self.workdir, 'allowed_values': [value.json for value in self.allowed_values], + 'any_value': self.any_value, 'mode': self.valid_mode, 'min_occurs': self.min_occurs, 'max_occurs': self.max_occurs, @@ -329,6 +330,7 @@ def from_json(cls, json_input): uom = json_input.pop('uom', None) metadata = json_input.pop('metadata', []) json_input.pop('type') + json_input.pop('any_value', None) instance = cls(**json_input) diff --git a/pywps/inout/literaltypes.py b/pywps/inout/literaltypes.py index cf4087eb4..49194057a 100644 --- a/pywps/inout/literaltypes.py +++ b/pywps/inout/literaltypes.py @@ -83,8 +83,6 @@ def __init__(self, allowed_type=ALLOWEDVALUETYPE.VALUE, value=None, minval=None, maxval=None, spacing=None, range_closure=RANGECLOSURETYPE.CLOSED): - AnyValue.__init__(self) - self.allowed_type = allowed_type self.value = value self.minval = minval @@ -93,14 +91,7 @@ def __init__(self, allowed_type=ALLOWEDVALUETYPE.VALUE, value=None, self.range_closure = range_closure def __eq__(self, other): - return all([ - self.allowed_type == other.allowed_type, - self.value == other.value, - self.minval == other.minval, - self.maxval == other.maxval, - self.spacing == other.spacing, - self.range_closure == other.range_closure, - ]) + return isinstance(other, AllowedValue) and self.json == other.json @property def json(self): @@ -118,6 +109,9 @@ def json(self): } +ALLOWED_VALUES_TYPES = (AllowedValue, AnyValue, NoValue, ValuesReference) + + def get_converter(convertor): """function for decoration of convert """ @@ -341,7 +335,11 @@ def make_allowedvalues(allowed_values): for value in allowed_values: - if isinstance(value, (AllowedValue, AnyValue, NoValue, ValuesReference)): + if value in ALLOWED_VALUES_TYPES: + # value is equal to one of the allowed classes objects + new_allowedvalues.append(value()) + elif isinstance(value, ALLOWED_VALUES_TYPES): + # value is an instance of one of the allowed classes new_allowedvalues.append(value) elif type(value) == tuple or type(value) == list: diff --git a/pywps/templates/1.0.0/describe/literal.xml b/pywps/templates/1.0.0/describe/literal.xml index aeac64548..e0bb95dd9 100644 --- a/pywps/templates/1.0.0/describe/literal.xml +++ b/pywps/templates/1.0.0/describe/literal.xml @@ -11,12 +11,14 @@ {% endif %} - {% if put.allowed_values %} + {% if put.any_value %} + + {% elif put.allowed_values %} - {% for value in put.allowed_values %} - {% if value.allowed_type == "value" %} + {% for value in put.allowed_values %} + {% if value.allowed_type == "value" %} {{ value.value }} - {% else %} + {% else %} {{ value.minval }} {{ value.maxval }} @@ -24,11 +26,9 @@ {{ value.spacing }} {% endif %} - {% endif %} - {% endfor %} + {% endif %} + {% endfor %} - {% elif put.any_value %} - {% endif %} {% if put.data %} {{ put.data }} diff --git a/tests/test_inout.py b/tests/test_inout.py index c2c27c7d0..307512f54 100644 --- a/tests/test_inout.py +++ b/tests/test_inout.py @@ -21,7 +21,7 @@ from pywps.validator import get_validator from pywps.inout.basic import IOHandler, SOURCE_TYPE, SimpleHandler, BBoxInput, BBoxOutput, \ ComplexInput, ComplexOutput, LiteralOutput, LiteralInput, _is_textfile -from pywps.inout.literaltypes import convert, AllowedValue +from pywps.inout.literaltypes import convert, AllowedValue, AnyValue from pywps._compat import StringIO, text_type, urlparse from pywps.validator.base import emptyvalidator from pywps.exceptions import InvalidParameterValue @@ -327,7 +327,7 @@ def make_literal_input(self): min_occurs=2, max_occurs=5, mode=MODE.STRICT, - allowed_values=[AllowedValue(value='something'), AllowedValue(value='something else')], + allowed_values=[AllowedValue(value='something'), AllowedValue(value='something else'), AnyValue()], default="something else", default_type=SOURCE_TYPE.DATA, ) @@ -349,6 +349,8 @@ def assert_literal_equals(self, literal_1, literal_2): self.assertEqual(literal_1.max_occurs, literal_2.max_occurs) self.assertEqual(literal_1.valid_mode, literal_2.valid_mode) self.assertEqual(literal_1.allowed_values, literal_2.allowed_values) + self.assertEqual(literal_1.any_value, literal_2.any_value) + self.assertTrue(literal_1.any_value) self.assertEqual(literal_1.as_reference, literal_2.as_reference) self.assertEqual(literal_1.data, literal_2.data)