From: Armin Ronacher Date: Tue, 17 Jun 2008 09:28:59 +0000 (+0200) Subject: Added `TemplateStream.dump`. X-Git-Tag: 2.0~17 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=74b510619b887fe50e20ca6c0dbdd71a429c44a8;p=jinja2.git Added `TemplateStream.dump`. --HG-- branch : trunk --- diff --git a/CHANGES b/CHANGES index 4277283..9d34381 100644 --- a/CHANGES +++ b/CHANGES @@ -17,6 +17,8 @@ Version 2.0 This would allow extensions to allow simplified gettext calls in template data and something similar. +- added :meth:`jinja2.environment.TemplateStream.dump`. + Version 2.0rc1 -------------- (no codename, released on July 9th 2008) diff --git a/docs/api.rst b/docs/api.rst index e16107a..d7ed844 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -216,7 +216,7 @@ useful if you want to dig deeper into Jinja2 or :ref:`develop extensions .. autoclass:: jinja2.environment.TemplateStream() - :members: disable_buffering, enable_buffering + :members: disable_buffering, enable_buffering, dump .. _identifier-naming: diff --git a/jinja2/environment.py b/jinja2/environment.py index 94d0679..57b49ae 100644 --- a/jinja2/environment.py +++ b/jinja2/environment.py @@ -681,6 +681,33 @@ class TemplateStream(object): self._gen = gen self.disable_buffering() + def dump(self, fp, encoding=None, errors='strict'): + """Dump the complete stream into a file or file-like object. + Per default unicode strings are written, if you want to encode + before writing specifiy an `encoding`. + + Example usage:: + + Template('Hello {{ name }}!').stream(name='foo').dump('hello.html') + """ + close = False + if isinstance(fp, basestring): + fp = file(fp, 'w') + close = True + try: + if encoding is not None: + iterable = (x.encode(encoding, errors) for x in self) + else: + iterable = self + if hasattr(fp, 'writelines'): + fp.writelines(iterable) + else: + for item in iterable: + fp.write(item) + finally: + if close: + fp.close() + def disable_buffering(self): """Disable the output buffering.""" self._next = self._gen.next