def __call__(self, environ, start_response): ptr_lookup = PtrLookup(environ.get('REMOTE_ADDR', '0.0.0.0')) ptr_lookup.start() try: self._validate_request(environ) env = self._get_envelope(environ) self._add_envelope_extras(environ, env, ptr_lookup) self._enqueue_envelope(env) except WsgiResponse as res: start_response(res.status, res.headers) return res.data except Exception as exc: logging.log_exception(__name__) msg = '{0!s}\n'.format(exc) content_length = str(len(msg)) headers = [('Content-Length', content_length), ('Content-Type', 'text/plain')] start_response('500 Internal Server Error', headers) return [msg] finally: ptr_lookup.kill(block=False)