| # Copyright (C) 2011 Jesus Leganes "piranna", piranna@gmail.com |
| # |
| # This module is part of python-sqlparse and is released under |
| # the BSD License: http://www.opensource.org/licenses/bsd-license.php. |
| |
| from types import GeneratorType |
| |
| |
| class Pipeline(list): |
| """Pipeline to process filters sequentially""" |
| |
| def __call__(self, stream): |
| """Run the pipeline |
| |
| Return a static (non generator) version of the result |
| """ |
| |
| # Run the stream over all the filters on the pipeline |
| for filter in self: |
| # Functions and callable objects (objects with '__call__' method) |
| if callable(filter): |
| stream = filter(stream) |
| |
| # Normal filters (objects with 'process' method) |
| else: |
| stream = filter.process(None, stream) |
| |
| # If last filter return a generator, staticalize it inside a list |
| if isinstance(stream, GeneratorType): |
| return list(stream) |
| return stream |