def call(self, http_request): try: # This try block handle Exception generated before the request is accepted. Once the request is accepted # a valid wps_reponse must exist. To report error use the wps_response using # wps_response._update_status(WPS_STATUS.FAILED, ...). # # We need this behaviour to handle the status file correctly, once the request is accepted, a # status file may be created and failure must be reported in this file instead of a raw ows:ExceptionReport # # Exeception from CapabilityResponse and DescribeResponse are always catched by this try ... except close # because they never have status. request_uuid = uuid.uuid1() environ_cfg = http_request.environ.get('PYWPS_CFG') if 'PYWPS_CFG' not in os.environ and environ_cfg: LOGGER.debug('Setting PYWPS_CFG to %s', environ_cfg) os.environ['PYWPS_CFG'] = environ_cfg wps_request = WPSRequest(http_request) LOGGER.info('Request: %s', wps_request.operation) if wps_request.operation in [ 'getcapabilities', 'describeprocess', 'execute' ]: log_request(request_uuid, wps_request) try: response = None if wps_request.operation == 'getcapabilities': response = self.get_capabilities( wps_request, request_uuid) response._update_status(WPS_STATUS.SUCCEEDED, u'', 100) elif wps_request.operation == 'describeprocess': response = self.describe(wps_request, request_uuid, wps_request.identifiers) response._update_status(WPS_STATUS.SUCCEEDED, u'', 100) elif wps_request.operation == 'execute': response = self.execute(wps_request.identifier, wps_request, request_uuid) return response except Exception as e: # This ensure that logged request get terminated in case of exception while the request is not # accepted store_status(request_uuid, WPS_STATUS.FAILED, u'Request rejected due to exception', 100) raise e else: raise RuntimeError("Unknown operation %r" % wps_request.operation) except NoApplicableCode as e: return e except HTTPException as e: return NoApplicableCode(e.description, code=e.code) except Exception as e: msg = "No applicable error code, please check error log." return NoApplicableCode(msg, code=500)
def call(self, http_request): try: # This try block handle Exception generated before the request is accepted. Once the request is accepted # a valid wps_reponse must exist. To report error use the wps_response using # wps_response._update_status(WPS_STATUS.FAILED, ...). # # We need this behaviour to handle the status file correctly, once the request is accepted, a # status file may be created and failure must be reported in this file instead of a raw ows:ExceptionReport # # Exeception from CapabilityResponse and DescribeResponse are always catched by this try ... except close # because they never have status. request_uuid = uuid.uuid1() environ_cfg = http_request.environ.get('PYWPS_CFG') if 'PYWPS_CFG' not in os.environ and environ_cfg: LOGGER.debug('Setting PYWPS_CFG to %s', environ_cfg) os.environ['PYWPS_CFG'] = environ_cfg wps_request = WPSRequest(http_request) LOGGER.info('Request: %s', wps_request.operation) if wps_request.operation in ['getcapabilities', 'describeprocess', 'execute']: log_request(request_uuid, wps_request) try: response = None if wps_request.operation == 'getcapabilities': response = self.get_capabilities(wps_request, request_uuid) response._update_status(WPS_STATUS.SUCCEEDED, u'', 100) elif wps_request.operation == 'describeprocess': response = self.describe(wps_request, request_uuid, wps_request.identifiers) response._update_status(WPS_STATUS.SUCCEEDED, u'', 100) elif wps_request.operation == 'execute': response = self.execute( wps_request.identifier, wps_request, request_uuid ) return response except Exception as e: # This ensure that logged request get terminated in case of exception while the request is not # accepted store_status(request_uuid, WPS_STATUS.FAILED, u'Request rejected due to exception', 100) raise e else: raise RuntimeError("Unknown operation %r" % wps_request.operation) except NoApplicableCode as e: return e except HTTPException as e: return NoApplicableCode(e.description, code=e.code) except Exception: msg = "No applicable error code, please check error log." return NoApplicableCode(msg, code=500)
def __call__(self, http_request): request_uuid = uuid.uuid1() environ_cfg = http_request.environ.get('PYWPS_CFG') if 'PYWPS_CFG' not in os.environ and environ_cfg: LOGGER.debug('Setting PYWPS_CFG to %s', environ_cfg) os.environ['PYWPS_CFG'] = environ_cfg try: wps_request = WPSRequest(http_request) LOGGER.info('Request: %s', wps_request.operation) if wps_request.operation in [ 'getcapabilities', 'describeprocess', 'execute' ]: log_request(request_uuid, wps_request) response = None if wps_request.operation == 'getcapabilities': response = self.get_capabilities(wps_request, request_uuid) elif wps_request.operation == 'describeprocess': response = self.describe(wps_request, request_uuid, wps_request.identifiers) elif wps_request.operation == 'execute': response = self.execute(wps_request.identifier, wps_request, request_uuid) update_response(request_uuid, response, close=True) return response else: update_response(request_uuid, response, close=True) raise RuntimeError("Unknown operation %r" % wps_request.operation) except HTTPException as e: # transform HTTPException to OWS NoApplicableCode exception if not isinstance(e, NoApplicableCode): e = NoApplicableCode(e.description, code=e.code) class FakeResponse: message = e.locator status = e.code status_percentage = 100 try: update_response(request_uuid, FakeResponse, close=True) except NoApplicableCode as e: return e return e except Exception as e: e = NoApplicableCode( "No applicable error code, please check error log", code=500) return e
def __call__(self, http_request): request_uuid = uuid.uuid1() environ_cfg = http_request.environ.get('PYWPS_CFG') if 'PYWPS_CFG' not in os.environ and environ_cfg: LOGGER.debug('Setting PYWPS_CFG to %s', environ_cfg) os.environ['PYWPS_CFG'] = environ_cfg try: wps_request = WPSRequest(http_request) LOGGER.info('Request: %s', wps_request.operation) if wps_request.operation in ['getcapabilities', 'describeprocess', 'execute']: log_request(request_uuid, wps_request) response = None if wps_request.operation == 'getcapabilities': response = self.get_capabilities() elif wps_request.operation == 'describeprocess': response = self.describe(wps_request.identifiers) elif wps_request.operation == 'execute': response = self.execute( wps_request.identifier, wps_request, request_uuid ) update_response(request_uuid, response, close=True) return response else: update_response(request_uuid, response, close=True) raise RuntimeError("Unknown operation %r" % wps_request.operation) except HTTPException as e: # transform HTTPException to OWS NoApplicableCode exception if not isinstance(e, NoApplicableCode): e = NoApplicableCode(e.description, code=e.code) class FakeResponse: message = e.locator status = e.code status_percentage = 100 try: update_response(request_uuid, FakeResponse, close=True) except NoApplicableCode as e: return e return e
def __call__(self, http_request): request_uuid = uuid.uuid1() try: wps_request = WPSRequest(http_request) if wps_request.operation in ['getcapabilities', 'describeprocess', 'execute']: log_request(request_uuid, wps_request) response = None if wps_request.operation == 'getcapabilities': response = self.get_capabilities() elif wps_request.operation == 'describeprocess': response = self.describe(wps_request.identifiers) elif wps_request.operation == 'execute': response = self.execute( wps_request.identifier, wps_request, request_uuid ) update_response(request_uuid, response, close=True) return response else: update_response(request_uuid, response, close=True) raise RuntimeError("Unknown operation %r" % wps_request.operation) except HTTPException as e: # transform HTTPException to OWS NoApplicableCode exception if not isinstance(e, NoApplicableCode): e = NoApplicableCode(e.description, code=e.code) class FakeResponse: message = e.locator status = e.code status_percentage = 100 update_response(request_uuid, FakeResponse, close=True) return e