docs: def _build_wsgi_env(event, app_name):
      """Turn the Lambda/API Gateway request event into a WSGI environment dict.
  
      :param dict event:
          The event parameters passed to the Lambda function entrypoint.
      :param str app_name:
          Name of the API application.
      """
      gateway = event['parameters']['gateway']
      request = event['parameters']['request']
      ctx = event['rawContext']
      headers = request['header']
      body = six.text_type(json.dumps(request['body']))
  
      # Render the path correctly so connexion/flask will pass the path params to
      # the handler function correctly.
      # Basically, this replaces "/foo/{param1}/bar/{param2}" with
      # "/foo/123/bar/456".
      path = gateway['resource-path'].format(
          **event['parameters']['request']['path']
      )
      environ = {
          'PATH_INFO': path,
          'QUERY_STRING': urlencode(request['querystring']),
          'REMOTE_ADDR': ctx['identity']['sourceIp'],
          'REQUEST_METHOD': ctx['httpMethod'],
          'SCRIPT_NAME': app_name,
          'SERVER_NAME': app_name,
          'SERVER_PORT': headers.get('X-Forwarded-Port', '80'),
          'SERVER_PROTOCOL': 'HTTP/1.1',
          'wsgi.version': (1, 0),
          'wsgi.url_scheme': headers.get('X-Forwarded-Proto', 'http'),
          'wsgi.input': StringIO(body),
          'wsgi.errors': StringIO(),
          'wsgi.multiprocess': False,
          'wsgi.multithread': False,
          'wsgi.run_once': False,
          'CONTENT_TYPE': headers.get('Content-Type', 'application/json'),
      }
      if ctx['httpMethod'] in ['POST', 'PUT', 'PATCH']:
          environ['CONTENT_LENGTH'] = str(len(body))
  
      for header_name, header_value in headers.items():
          wsgi_name = 'HTTP_{}'.format(header_name.upper().replace('-', '_'))
          environ[wsgi_name] = str(header_value)
  
      return environ