Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions pywps/inout/inputs.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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)

Expand Down
20 changes: 9 additions & 11 deletions pywps/inout/literaltypes.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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):
Expand All @@ -118,6 +109,9 @@ def json(self):
}


ALLOWED_VALUES_TYPES = (AllowedValue, AnyValue, NoValue, ValuesReference)


def get_converter(convertor):
"""function for decoration of convert
"""
Expand Down Expand Up @@ -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:
Expand Down
16 changes: 8 additions & 8 deletions pywps/templates/1.0.0/describe/literal.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,24 +11,24 @@
</Supported>
</UOMs>
{% endif %}
{% if put.allowed_values %}
{% if put.any_value %}
<ows:AnyValue />
{% elif put.allowed_values %}
<ows:AllowedValues>
{% for value in put.allowed_values %}
{% if value.allowed_type == "value" %}
{% for value in put.allowed_values %}
{% if value.allowed_type == "value" %}
<ows:Value>{{ value.value }}</ows:Value>
{% else %}
{% else %}
<ows:Range ows:rangeClosure="{{ value.range_closure }}">
<ows:MinimumValue>{{ value.minval }}</ows:MinimumValue>
<ows:MaximumValue>{{ value.maxval }}</ows:MaximumValue>
{% if value.spacing %}
<ows:Spacing>{{ value.spacing }}</ows:Spacing>
{% endif %}
</ows:Range>
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}
</ows:AllowedValues>
{% elif put.any_value %}
<ows:AnyValue />
{% endif %}
{% if put.data %}
<DefaultValue>{{ put.data }}</DefaultValue>
Expand Down
6 changes: 4 additions & 2 deletions tests/test_inout.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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,
)
Expand All @@ -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)
Expand Down