def test_post_bad_version(self): acceptedVersions_doc = OWS.AcceptVersions(OWS.Version('2001-123')) request_doc = WPS.GetCapabilities(acceptedVersions_doc) resp = self.client.post_xml(doc=request_doc) exception = resp.xpath('/ows:ExceptionReport' '/ows:Exception') assert resp.status_code == 400 assert exception[0].attrib[ 'exceptionCode'] == 'VersionNegotiationFailed'
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_post_request(self): request_doc = WPS.GetCapabilities() resp = self.client.post_xml(doc=request_doc) self.check_capabilities_response(resp)