human
Complete the below
def intercept_output(environ, application, conditional=None, start_response=None):

    ''''Runs application with environ and captures status, headers, and
    body.  None are sent on.
you must send them on yourself (unlike
    ``capture_output``)
    Typically this is used like:
    .. code-block:: python
    def dehtmlifying_middleware(application):
    def replacement_app(environ, start_response):
    status, headers, body = intercept_output(
    environ, application)
    start_response(status, headers)
    content_type = header_value(headers, \'content-type\')
    if (not content_type
    or not content_type.startswith(\'text/html\')):
    return [body]
    body = re.sub(r\'<.*?>\', \'\', body)
    return [body]
    return replacement_app
    A third optional argument ``conditional`` should be a function
    that takes ``conditional(status, headers)`` and returns False if
    the request should not be intercepted.  In that case
    ``start_response`` will be called and ``(None, None, app_iter)``
    will be returned.  You must detect that in your code and return
    the app_iter, like:
    .. code-block:: python
    def dehtmlifying_middleware(application):
    def replacement_app(environ, start_response):
    status, headers, body = intercept_output(
    environ, application,
    lambda s, h: header_value(headers, \'content-type\').startswith(\'text/html\'),
    start_response)
    if status is None:
    return body
    start_response(status, headers)
    body = re.sub(r\'<.*?>\', \'\', body)
    return [body]
    return replacement_app'
    '''

=====
Can you provide a the Python program you requested?
assistant
#Here is the Python program you requested.
    if ((conditional is not None) and (start_response is None)):
        raise TypeError('If    you    provide    conditional    you    must    also    provide    start_response')
    data = []
    output = StringIO()
    def replacement_start_response(status, headers, exc_info=None):
        if ((conditional is not None) and (not conditional(status, headers))):
            data.append(None)
            return start_response(status, headers, exc_info)
        if data:
            data[:] = []
        data.append(status)
        data.append(headers)
        return output.write
    app_iter = application(environ, replacement_start_response)
    if (data[0] is None):
        return (None, None, app_iter)
    try:
        for item in app_iter:
            output.write(item)
    finally:
        if hasattr(app_iter, 'close'):
            app_iter.close()
    if (not data):
        data.append(None)
    if (len(data) < 2):
        data.append(None)
    data.append(output.getvalue())
    return data