diff --git a/pywps/inout/basic.py b/pywps/inout/basic.py index 39f192574..665913413 100644 --- a/pywps/inout/basic.py +++ b/pywps/inout/basic.py @@ -65,12 +65,16 @@ class UOM(object): :param uom: unit of measure """ - def __init__(self, uom=''): + def __init__(self, uom='', reference=None): self.uom = uom + self.reference = reference + + if self.reference is None: + self.reference = OGCUNIT[self.uom] @property def json(self): - return {"reference": OGCUNIT[self.uom], + return {"reference": self.reference, "uom": self.uom} def __eq__(self, other): diff --git a/pywps/inout/inputs.py b/pywps/inout/inputs.py index 0618c0f02..e6edaf35b 100644 --- a/pywps/inout/inputs.py +++ b/pywps/inout/inputs.py @@ -338,7 +338,10 @@ def from_json(cls, json_input): json_input_copy = deepcopy(json_input) json_input_copy['allowed_values'] = allowed_values - json_input_copy['uoms'] = [basic.UOM(uom.get('uom')) for uom in json_input.get('uoms', [])] + json_input_copy['uoms'] = [ + basic.UOM(uom['uom'], uom['reference']) + for uom in json_input.get('uoms', []) + ] data = json_input_copy.pop('data', None) uom = json_input_copy.pop('uom', None) @@ -352,7 +355,7 @@ def from_json(cls, json_input): instance.metadata = [Metadata.from_json(d) for d in metadata] instance.data = data if uom: - instance.uom = basic.UOM(uom['uom']) + instance.uom = basic.UOM(uom['uom'], uom['reference']) return instance diff --git a/pywps/inout/outputs.py b/pywps/inout/outputs.py index 9c0a663da..c9238c4d9 100644 --- a/pywps/inout/outputs.py +++ b/pywps/inout/outputs.py @@ -281,7 +281,10 @@ def json(self): @classmethod def from_json(cls, json_output): - uoms = [basic.UOM(uom.get('uom')) for uom in json_output.get('uoms', [])] + uoms = [ + basic.UOM(uom['uom'], uom['reference']) + for uom in json_output.get('uoms', []) + ] uom = json_output.get('uom') instance = cls( @@ -296,7 +299,7 @@ def from_json(cls, json_output): instance.data = json_output.get('data') if uom: - instance.uom = basic.UOM(uom['uom']) + instance.uom = basic.UOM(uom['uom'], uom['reference']) return instance diff --git a/tests/test_inout.py b/tests/test_inout.py index 3c7b18b9d..44a623abc 100644 --- a/tests/test_inout.py +++ b/tests/test_inout.py @@ -569,7 +569,7 @@ def setUp(self): mode=2, allowed_values=(1, 2, (3, 3, 12)), default=6, - uoms=(UOM("metre"),), + uoms=(UOM("metre"), UOM("km / h", "custom reference")), translations={"fr-CA": {"title": "Mon input", "abstract": "Une description"}}, ) @@ -603,8 +603,10 @@ def test_json_out(self): self.literal_input.data = 9 out = self.literal_input.json - self.assertTrue('uoms' in out, 'UOMs does not exist') - self.assertTrue('uom' in out, 'uom does not exist') + self.assertEqual(out['uoms'][0]["uom"], "metre") + self.assertEqual(out['uoms'][1]["uom"], "km / h") + self.assertEqual(out['uoms'][1]["reference"], "custom reference") + self.assertEqual(out['uom']["uom"], "metre") self.assertFalse(out['workdir'], 'Workdir exist') self.assertEqual(out['data_type'], 'integer', 'Data type is integer') self.assertFalse(out['abstract'], 'abstract exist') @@ -669,6 +671,7 @@ def setUp(self): "literaloutput", data_type="integer", title="Literal Output", + uoms=[UOM("km / h", "custom reference"), UOM("m / s", "other reference")], translations={"fr-CA": {"title": "Mon output", "abstract": "Une description"}}, ) @@ -685,6 +688,8 @@ class Storage(object): def test_json(self): new_output = inout.outputs.LiteralOutput.from_json(self.literal_output.json) self.assertEqual(new_output.identifier, 'literaloutput') + self.assertEqual(new_output.uom, self.literal_output.uom) + self.assertEqual(new_output.uoms, self.literal_output.uoms) self.assertEqual( new_output.translations, {"fr-ca": {"title": "Mon output", "abstract": "Une description"}},