

def run_wsgi(self):
    if (environ.headers.get('Expect', '').lower().strip() == '100-continue'):
        self.wfile.write(b'HTTP/1.1 100 Continue\r\n\r\n')
    environ = self.make_environ()
    headers_set = []
    headers_sent = []

    def write(data):
        assert headers_set, 'write() before start_response'
        if (not headers_sent):
            (status, response_headers) = headers_sent[:] = headers_set
            try:
                (code, msg) = status.split(None, 1)
            except ValueError:
                (code, msg) = (status, '')
            self.send_response(int(code), msg)
            header_keys = set()
            for (key, value) in response_headers:
                self.send_header(key, value)
                key = key.lower()
                header_keys.add(key)
            if ('content-length' not in header_keys):
                self.close_connection = True
                self.send_header('Connection', 'close')
            if ('server' not in header_keys):
                self.send_header('Server', self.version_string())
            if ('date' not in header_keys):
                self.send_header('Date', self.date_time_string())
            self.end_headers()
        assert (type(data) is bytes), 'applications must write bytes'
        self.wfile.write(data)
        self.wfile.flush()

    def start_response(status, response_headers, exc_info=None):
        if exc_info:
            try:
                if headers_sent:
                    reraise(*exc_info)
            finally:
                exc_info = None
        elif headers_set:
            raise AssertionError('Headers already set')
        headers_set[:] = [status, response_headers]
        return write

    def execute(app):
        application_iter = app(environ, start_response)
        try:
            for data in application_iter:
                write(data)
            if (not headers_sent):
                write(b'')
        finally:
            if hasattr(application_iter, 'close'):
                application_iter.close()
            application_iter = None
    try:
        execute(self.server.app)
    except (socket.error, socket.timeout) as e:
        self.connection_dropped(e, environ)
    except Exception:
        if self.server.passthrough_errors:
            raise
        from werkzeug.debug.tbtools import get_current_traceback
        traceback = get_current_traceback(ignore_system_exceptions=True)
        try:
            if (not headers_sent):
                del headers_set[:]
            execute(InternalServerError())
        except Exception:
            pass
        self.server.log('error', 'Error on request:\n%s', traceback.plaintext)

dataset/ETHPy150Open Eforcers/gae-flask-todo/lib/werkzeug/serving.py WSGIRequestHandler.run_wsgi/VarMisuse@12/14 `self`->`environ`