diff --git a/ChangeLog b/ChangeLog index a3b3b19d..eadc6eeb 100755 --- a/ChangeLog +++ b/ChangeLog @@ -33,6 +33,8 @@ Bugs: Features: * :issue:`161` - Ability to override `usage` + * :issue:`164` - Store previously rendered data as app._last_rendered, and + retrievable by app.get_last_rendered(). * :issue:`165` - Allow utils.fs.backup() to support a suffix kwarg * :issue:`166` - Ability to set the 'app' for CementTestCase.make_app() * :issue:`170` - Added support for `nested` and `embedded` controllers. diff --git a/cement/core/foundation.py b/cement/core/foundation.py index c81afd62..c59142ed 100644 --- a/cement/core/foundation.py +++ b/cement/core/foundation.py @@ -343,7 +343,8 @@ class CementApp(meta.MetaMixin): self._validate_label() self._loaded_bootstrap = None self._parsed_args = None - + self._last_rendered = None + self.ext = None self.config = None self.log = None @@ -511,8 +512,18 @@ class CementApp(meta.MetaMixin): else: out_text = str(res) + self._last_rendered = (data, out_text) return out_text + def get_last_rendered(self): + """ + Return the (data, output_text) tuple of the last time self.render() was + called. + + :returns: tuple (data, output_text) + """ + return self._last_rendered + @property def pargs(self): """ diff --git a/doc/source/dev/testing.rst b/doc/source/dev/testing.rst index 185aab98..62e2e8be 100644 --- a/doc/source/dev/testing.rst +++ b/doc/source/dev/testing.rst @@ -56,6 +56,11 @@ The following outlines a basic test case using the cement.utils.test module. # Run the applicaion, if necessary self.app.run() + # Test the last rendered output (if app.render was used) + data, output = app.get_last_rendered() + self.eq(data, {'foo':'bar'}) + self.eq(output, 'some rendered output text) + # Close the application, again if necessary self.app.close() diff --git a/tests/core/foundation_tests.py b/tests/core/foundation_tests.py index bb70a63f..3d961da4 100644 --- a/tests/core/foundation_tests.py +++ b/tests/core/foundation_tests.py @@ -212,4 +212,10 @@ class FoundationTestCase(test.CementTestCase): app.setup() app.run() self.eq(app.pargs.debug, True) - \ No newline at end of file + + def test_last_rendered(self): + self.app.setup() + output_text = self.app.render({'foo':'bar'}) + last_data, last_output = self.app.get_last_rendered() + self.eq({'foo':'bar'}, last_data) + self.eq(output_text, last_output) \ No newline at end of file