WSGI Fallback Iterator

Wenn man WSGI Middlewares programmiert ist es jedes mal nötig die close Methode der Anwendung aufzurufen wenn nötig.

   1 class CallbackIterator(object):
   2 
   3     def __init__(self, app, on_iteration=None, on_close=None):
   4         self.appiter = iter(app)
   5         self.on_iteration = on_iteration or lambda s, l: l
   6         self.on_close = on_close or lambda s: None
   7 
   8     def __iter__(self):
   9         return self
  10 
  11     def next(self):
  12         try:
  13             return self.on_iteration(self.appiter.next())
  14         except:
  15             self.close()
  16             raise
  17 
  18     def close(self):
  19         if hasattr(self.appiter, 'close'):
  20             self.appiter.close()
  21         self.on_close()

Verwendet kann das dann beispielsweise so werden:

   1 class ReplaceMiddleware(object):
   2 
   3     def __init__(self, app):
   4         self.app = app
   5 
   6     def on_iter(self, line):
   7         return line.replace('<BLUB!>', 'blub blub blub')
   8 
   9     def __call__(self, environ, start_response):
  10         result = self.app(environ, start_response)
  11         return CallbackIter(result, self.on_iter)

Tags: Wsgi | Web

WSGI Fallback Iterator (last edited 2009-06-17 16:14:14 by localhost)