diff piecrust/data/debug.py @ 407:bd56d9acd6ef

debug: Add support for more attributes for the debug info. * `debug_render_not_empty`: don't render an "empty" label if not attributes or items have been rendered for an object. * `debug_render_doc_dynamic`: render dynamic doc-string.
author Ludovic Chabant <ludovic@chabant.com>
date Mon, 25 May 2015 18:36:44 -0700
parents d7a548ebcd58
children 32c7c2d219d2
line wrap: on
line diff
--- a/piecrust/data/debug.py	Mon May 25 18:35:27 2015 -0700
+++ b/piecrust/data/debug.py	Mon May 25 18:36:44 2015 -0700
@@ -208,7 +208,8 @@
         self._renderDoc(data, path)
         self._renderAttributes(data, path)
         rendered_count = self._renderIterable(data, path, lambda d: enumerate(d))
-        if rendered_count == 0:
+        if (rendered_count == 0 and
+                not hasattr(data.__class__, 'debug_render_not_empty')):
             self._writeLine('<p style="%s %s">(empty array)</p>' % (CSS_P, CSS_DOC))
         self._writeLine('</div>')
 
@@ -218,7 +219,8 @@
         self._renderAttributes(data, path)
         rendered_count = self._renderIterable(data, path,
                 lambda d: sorted(iter(d.items()), key=lambda i: i[0]))
-        if rendered_count == 0:
+        if (rendered_count == 0 and
+                not hasattr(data.__class__, 'debug_render_not_empty')):
             self._writeLine('<p style="%s %s">(empty dictionary)</p>' % (CSS_P, CSS_DOC))
         self._writeLine('</div>')
 
@@ -240,10 +242,12 @@
                 data.__class__.debug_render_items):
             rendered_count = self._renderIterable(data, path,
                     lambda d: enumerate(d))
-            if rendered_count == 0:
+            if (rendered_count == 0 and
+                    not hasattr(data.__class__, 'debug_render_not_empty')):
                 self._writeLine('<p style="%s %s">(empty)</p>' % (CSS_P, CSS_DOC))
 
-        elif rendered_attrs == 0:
+        elif (rendered_attrs == 0 and
+                not hasattr(data.__class__, 'debug_render_not_empty')):
             self._writeLine('<p style="%s %s">(empty)</p>' % (CSS_P, CSS_DOC))
 
         self._writeLine('</div>')
@@ -265,6 +269,13 @@
             self._writeLine('<span style="%s">&ndash; %s</span>' %
                     (CSS_DOC, data.__class__.debug_render_doc))
 
+        if hasattr(data.__class__, 'debug_render_doc_dynamic'):
+            drdd = data.__class__.debug_render_doc_dynamic
+            for ng in drdd:
+                doc = getattr(data, ng)
+                self._writeLine('<span style="%s">&ndash; %s</span>' %
+                        (CSS_DOC, doc()))
+
         doc = self.external_docs.get(path)
         if doc is not None:
             self._writeLine('<span style="%s">&ndash; %s</span>' %