def wsgi_simple_responder(
        result: Union[str, bytes],
        handler: Callable[[Union[str, bytes]], WSGI_TUPLE_TYPE],
        start_response: TYPE_WSGI_START_RESPONSE,
        status: str = '200 OK',
        extraheaders: TYPE_WSGI_RESPONSE_HEADERS = None) \
        -> TYPE_WSGI_APP_RESULT:
    """
    Simple WSGI app.

    Args:
        result: the data to be processed by ``handler``
        handler: a function returning a ``(contenttype, extraheaders, data)``
            tuple, e.g. ``text_result``, ``html_result``
        start_response: standard WSGI ``start_response`` function
        status: status code (default ``"200 OK"``)
        extraheaders: optional extra HTTP headers

    Returns:
        WSGI application result

    """
    extraheaders = extraheaders or []
    (contenttype, extraheaders2, output) = handler(result)
    response_headers = [('Content-Type', contenttype),
                        ('Content-Length', str(len(output)))]
    response_headers.extend(extraheaders)
    if extraheaders2 is not None:
        response_headers.extend(extraheaders2)
    # noinspection PyArgumentList
    start_response(status, response_headers)
    return [output]
Simple WSGI app.

    Args:
        result: the data to be processed by ``handler``
        handler: a function returning a ``(contenttype, extraheaders, data)``
            tuple, e.g. ``text_result``, ``html_result``
        start_response: standard WSGI ``start_response`` function
        status: status code (default ``"200 OK"``)
        extraheaders: optional extra HTTP headers

    Returns:
        WSGI application result