paste.wsgilib – Miscellaneous WSGI utility functions — Paste v1.7.5 documentation

### Navigation

- index
- modules |
- Paste v1.7.5 documentation »

# `paste.wsgilib` – Miscellaneous WSGI utility functions

A module of many disparate routines.

## Module Contents

`paste.wsgilib.` `add_close`(app_iterable, close_func)

  An an iterable that iterates over app_iter, then calls close_func.

`paste.wsgilib.` `add_start_close`(app_iterable, start_func, close_func=None)

  An an iterable that iterates over app_iter, calls start_func before the first item is returned, then calls close_func at the end.

`paste.wsgilib.` `chained_app_iters`(*chained)

  Chains several app_iters together, also delegating .close() to each of them.

class `paste.wsgilib.` `encode_unicode_app_iter`(app_iterable, encoding='ascii', errors='strict')

  Encodes an app_iterable’s unicode responses as strings

`paste.wsgilib.` `catch_errors`(application, environ, start_response, error_callback, ok_callback=None)

  Runs the application, and returns the application iterator (which should be passed upstream). If an error occurs then error_callback will be called with exc_info as its sole argument. If no errors occur and ok_callback is given, then it will be called with no arguments.

`paste.wsgilib.` `catch_errors_app`(application, environ, start_response, error_callback_app, ok_callback=None, catch=<type 'exceptions.Exception'>)

  Like `catch_errors`, except error_callback_app should be a callable that will receive three arguments – `environ`, `start_response`, and `exc_info`. It should call `start_response` (with the exc_info argument!) and return an iterator.

`paste.wsgilib.` `raw_interactive`(application, path='', raise_on_wsgi_error=False, **environ)

  Runs the application in a fake environment.

`paste.wsgilib.` `interactive`(*args, **kw)

  Runs the application interatively, wrapping raw_interactive but returning the output in a formatted way.

`paste.wsgilib.` `dump_environ`(environ, start_response)

  Application which simply dumps the current environment variables out as a plain text response.

`paste.wsgilib.` `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:

      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:

      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

### Navigation

- index
- modules |
- Paste v1.7.5 documentation »