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)