def test_post_with_string_input(self):
     request_doc = WPS.Execute(OWS.Identifier('greeter'),
                               WPS.DataInputs(
                                   WPS.Input(
                                       OWS.Identifier('name'),
                                       WPS.Data(WPS.LiteralData('foo')))),
                               version='1.0.0')
     resp = self.client.post_xml(doc=request_doc)
     assert_response_success(resp)
     assert get_output(resp.xml) == {'message': "Hello foo!"}
def test_two_strings():
    request_doc = WPS.Execute(
        OWS.Identifier('foo'),
        WPS.DataInputs(
            WPS.Input(OWS.Identifier('name1'),
                      WPS.Data(WPS.LiteralData('foo'))),
            WPS.Input(OWS.Identifier('name2'),
                      WPS.Data(WPS.LiteralData('bar')))))
    rv = get_inputs_from_xml(request_doc)
    assert rv['name1'][0]['data'] == 'foo'
    assert rv['name2'][0]['data'] == 'bar'
def test_complex_input():
    the_data = E.TheData("hello world")
    request_doc = WPS.Execute(
        OWS.Identifier('foo'),
        WPS.DataInputs(
            WPS.Input(
                OWS.Identifier('name'),
                WPS.Data(WPS.ComplexData(the_data, mimeType='text/foobar')))))
    rv = get_inputs_from_xml(request_doc)
    assert rv['name'][0]['mimeType'] == 'text/foobar'
    rv_doc = lxml.etree.parse(StringIO(rv['name'][0]['data'])).getroot()
    assert rv_doc.tag == 'TheData'
    assert rv_doc.text == 'hello world'
def test_one_string():
    request_doc = WPS.Execute(
        OWS.Identifier('foo'),
        WPS.DataInputs(
            WPS.Input(OWS.Identifier('name'),
                      WPS.Data(WPS.LiteralData('foo'))),
            WPS.Input(OWS.Identifier('name'),
                      WPS.Data(WPS.LiteralData('bar')))))
    rv = get_inputs_from_xml(request_doc)
    assert 'name' in rv
    assert len(rv['name']) == 2
    assert rv['name'][0]['data'] == 'foo'
    assert rv['name'][1]['data'] == 'bar'
def test_complex_input_raw_value():
    the_data = '{ "plot":{ "Version" : "0.1" } }'

    request_doc = WPS.Execute(
        OWS.Identifier('foo'),
        WPS.DataInputs(
            WPS.Input(
                OWS.Identifier('json'),
                WPS.Data(WPS.ComplexData(the_data,
                                         mimeType='application/json')))))
    rv = get_inputs_from_xml(request_doc)
    assert rv['json'][0]['mimeType'] == 'application/json'
    json_data = json.loads(rv['json'][0]['data'])
    assert json_data['plot']['Version'] == '0.1'
def test_reference_post_input():
    request_doc = WPS.Execute(
        OWS.Identifier('foo'),
        WPS.DataInputs(
            WPS.Input(
                OWS.Identifier('name'),
                WPS.Reference(WPS.Body('request body'), {
                    '{http://www.w3.org/1999/xlink}href':
                    'http://foo/bar/service'
                },
                              method='POST'))))
    rv = get_inputs_from_xml(request_doc)
    assert rv['name'][0]['href'] == 'http://foo/bar/service'
    assert rv['name'][0]['method'] == 'POST'
    assert rv['name'][0]['body'] == 'request body'
def test_bbox_input():
    request_doc = WPS.Execute(
        OWS.Identifier('request'),
        WPS.DataInputs(
            WPS.Input(
                OWS.Identifier('bbox'),
                WPS.Data(
                    WPS.BoundingBoxData(OWS.LowerCorner('40 50'),
                                        OWS.UpperCorner('60 70'))))))
    rv = get_inputs_from_xml(request_doc)
    bbox = rv['bbox'][0]
    assert isinstance(bbox, BoundingBox)
    assert bbox.minx == '40'
    assert bbox.miny == '50'
    assert bbox.maxx == '60'
    assert bbox.maxy == '70'
def test_complex_input_base64_value():
    the_data = 'eyAicGxvdCI6eyAiVmVyc2lvbiIgOiAiMC4xIiB9IH0='

    request_doc = WPS.Execute(
        OWS.Identifier('foo'),
        WPS.DataInputs(
            WPS.Input(
                OWS.Identifier('json'),
                WPS.Data(
                    WPS.ComplexData(the_data,
                                    encoding='base64',
                                    mimeType='application/json')))))
    rv = get_inputs_from_xml(request_doc)
    assert rv['json'][0]['mimeType'] == 'application/json'
    json_data = json.loads(rv['json'][0]['data'].decode())
    assert json_data['plot']['Version'] == '0.1'
    def test_bbox(self):
        request_doc = WPS.Execute(OWS.Identifier('my_bbox_process'),
                                  WPS.DataInputs(
                                      WPS.Input(
                                          OWS.Identifier('mybbox'),
                                          WPS.Data(
                                              WPS.BoundingBoxData(
                                                  OWS.LowerCorner('15 50'),
                                                  OWS.UpperCorner('16 51'),
                                              )))),
                                  version='1.0.0')
        resp = self.client.post_xml(doc=request_doc)
        assert_response_success(resp)

        [output
         ] = xpath_ns(resp.xml, '/wps:ExecuteResponse'
                      '/wps:ProcessOutputs/Output')
        self.assertEqual('outbbox',
                         xpath_ns(output, './ows:Identifier')[0].text)
        self.assertEqual(
            '15 50',
            xpath_ns(output, './ows:BoundingBox/ows:LowerCorner')[0].text)
Exemple #10
0
    def parse_post_request(handler):
        """Factory function returing propper parsing function
        """
        try:
            doc = lxml.etree.fromstring(handler.request.body)
        except Exception as e:
            raise NoApplicableCode(e.msg)

        wpsrequest = WPSRequest()

        tagname = doc.tag

        def parse_post_getcapabilities():
            """Parse POST GetCapabilities request
            """
            acceptedversions = xpath_ns(
                doc, '/wps:GetCapabilities/ows:AcceptVersions/ows:Version')
            acceptedversions = ','.join(map(lambda v: v.text,
                                            acceptedversions))
            wpsrequest.check_accepted_versions(acceptedversions)

        def parse_post_describeprocess():
            """Parse POST DescribeProcess request
            """

            version = doc.attrib.get('version')
            wpsrequest.check_and_set_version(version)

            language = doc.attrib.get('language')
            wpsrequest.check_and_set_language(language)

            wpsrequest.operation = 'describeprocess'
            wpsrequest.identifiers = [
                identifier_el.text
                for identifier_el in xpath_ns(doc, './ows:Identifier')
            ]

        def parse_post_execute():
            """Parse POST Execute request
            """

            version = doc.attrib.get('version')
            wpsrequest.check_and_set_version(version)

            language = doc.attrib.get('language')
            wpsrequest.check_and_set_language(language)

            wpsrequest.operation = 'execute'

            identifier = xpath_ns(doc, './ows:Identifier')

            if not identifier:
                raise MissingParameterValue('Process identifier not set',
                                            'Identifier')

            wpsrequest.identifier = identifier[0].text
            wpsrequest.lineage = 'false'
            wpsrequest.store_execute = 'false'
            wpsrequest.status = 'false'
            wpsrequest.inputs = get_inputs_from_xml(doc)
            wpsrequest.outputs = get_output_from_xml(doc)
            wpsrequest.raw = False
            if xpath_ns(doc,
                        '/wps:Execute/wps:ResponseForm/wps:RawDataOutput'):
                wpsrequest.raw = True
                # executeResponse XML will not be stored
                wpsrequest.store_execute = 'false'

            # check if response document tag has been set then retrieve
            response_document = xpath_ns(
                doc, './wps:ResponseForm/wps:ResponseDocument')
            if len(response_document) > 0:
                wpsrequest.lineage = response_document[0].attrib.get(
                    'lineage', 'false')
                wpsrequest.store_execute = response_document[0].attrib.get(
                    'storeExecuteResponse', 'false')
                # XXX If storeExecuteResponse is set then we enforce
                # the status supports
                wpsrequest.status = wpsrequest.store_execute
                # Set timeout
                timeout = response_document[0].attrib.get('timeout')
                wpsrequest.check_and_set_timeout(timeout)
                # Set expiration
                expire = response_document[0].attrib.get('expire')
                wpsrequest.check_and_set_expiration(expire)

        if tagname == WPS.GetCapabilities().tag:
            wpsrequest.operation = 'getcapabilities'
            parse_post_getcapabilities()
        elif tagname == WPS.DescribeProcess().tag:
            wpsrequest.operation = 'describeprocess'
            parse_post_describeprocess()
        elif tagname == WPS.Execute().tag:
            wpsrequest.operation = 'execute'
            parse_post_execute()
        else:
            raise InvalidParameterValue('Unknown request %r' % tagname,
                                        'request')

        # Return the created WPSRequest object
        return wpsrequest
def test_empty():
    request_doc = WPS.Execute(OWS.Identifier('foo'))
    assert get_inputs_from_xml(request_doc) == {}
 def test_post_with_no_inputs(self):
     request_doc = WPS.Execute(OWS.Identifier('ultimate_question'),
                               version='1.0.0')
     resp = self.client.post_xml(doc=request_doc)
     assert_response_success(resp)
     assert get_output(resp.xml) == {'outvalue': '42'}