From 73ae6d9c2e6ebf5e80706c287cf34ecdf3db4f16 Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Fri, 27 Oct 2023 23:36:00 -0400 Subject: [PATCH] properly handle optional reference in UOM --- pywps/inout/basic.py | 2 +- tests/test_describe.py | 14 +++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/pywps/inout/basic.py b/pywps/inout/basic.py index d1a7f9ed2..1cfb6ac75 100644 --- a/pywps/inout/basic.py +++ b/pywps/inout/basic.py @@ -77,7 +77,7 @@ def __init__(self, uom='', reference=None): self.reference = reference if self.reference is None: - self.reference = OGCUNIT[self.uom] + self.reference = OGCUNIT.get(self.uom, '') @property def json(self): diff --git a/tests/test_describe.py b/tests/test_describe.py index 229bb0da1..72a7b1322 100644 --- a/tests/test_describe.py +++ b/tests/test_describe.py @@ -10,6 +10,7 @@ from pywps import LiteralOutput, ComplexOutput, BoundingBoxOutput from pywps import get_ElementMakerForVersion, OGCTYPE, Format, NAMESPACES, OGCUNIT from pywps.inout.literaltypes import LITERAL_DATA_TYPES +from pywps.inout.basic import UOM from pywps.app.basic import get_xpath_ns from pywps.app.Common import Metadata from pywps.inout.literaltypes import AllowedValue @@ -41,7 +42,7 @@ def get_default_value(el): def get_single_uom(el): ows = el.nsmap["ows"] unit = el.text - href = el.attrib[f"{{{ows}}}reference"] + href = el.attrib.get(f"{{{ows}}}reference") return {"uom": unit, "reference": href} @@ -286,13 +287,20 @@ def hello(request): inputs=[LiteralInput('the_number', 'Input number', data_type='float', - uoms=['metre', 'feet'])]) + uoms=[ + 'metre', + 'feet', + 'undef', + UOM('pixel', 'http://schema.com/#pixel'), + ])]) result = self.describe_process(hello_process) uoms = { 'default': {'uom': 'metre', 'reference': OGCUNIT['metre']}, 'supported': [ {'uom': 'metre', 'reference': OGCUNIT['metre']}, - {'uom': 'feet', 'reference': OGCUNIT['feet']} + {'uom': 'feet', 'reference': OGCUNIT['feet']}, + {'uom': 'undef', 'reference': None}, # no mapping to known OGC URN + {'uom': 'pixel', 'reference': 'http://schema.com/#pixel'}, ] } assert result.inputs == [('the_number', 'literal', 'float', None, uoms)]