comparison 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
comparison
equal deleted inserted replaced
406:9caaf78a17db 407:bd56d9acd6ef
206 def _renderList(self, data, path): 206 def _renderList(self, data, path):
207 self._writeLine('<div style="%s">' % CSS_DATABLOCK) 207 self._writeLine('<div style="%s">' % CSS_DATABLOCK)
208 self._renderDoc(data, path) 208 self._renderDoc(data, path)
209 self._renderAttributes(data, path) 209 self._renderAttributes(data, path)
210 rendered_count = self._renderIterable(data, path, lambda d: enumerate(d)) 210 rendered_count = self._renderIterable(data, path, lambda d: enumerate(d))
211 if rendered_count == 0: 211 if (rendered_count == 0 and
212 not hasattr(data.__class__, 'debug_render_not_empty')):
212 self._writeLine('<p style="%s %s">(empty array)</p>' % (CSS_P, CSS_DOC)) 213 self._writeLine('<p style="%s %s">(empty array)</p>' % (CSS_P, CSS_DOC))
213 self._writeLine('</div>') 214 self._writeLine('</div>')
214 215
215 def _renderDict(self, data, path): 216 def _renderDict(self, data, path):
216 self._writeLine('<div style="%s">' % CSS_DATABLOCK) 217 self._writeLine('<div style="%s">' % CSS_DATABLOCK)
217 self._renderDoc(data, path) 218 self._renderDoc(data, path)
218 self._renderAttributes(data, path) 219 self._renderAttributes(data, path)
219 rendered_count = self._renderIterable(data, path, 220 rendered_count = self._renderIterable(data, path,
220 lambda d: sorted(iter(d.items()), key=lambda i: i[0])) 221 lambda d: sorted(iter(d.items()), key=lambda i: i[0]))
221 if rendered_count == 0: 222 if (rendered_count == 0 and
223 not hasattr(data.__class__, 'debug_render_not_empty')):
222 self._writeLine('<p style="%s %s">(empty dictionary)</p>' % (CSS_P, CSS_DOC)) 224 self._writeLine('<p style="%s %s">(empty dictionary)</p>' % (CSS_P, CSS_DOC))
223 self._writeLine('</div>') 225 self._writeLine('</div>')
224 226
225 def _renderObject(self, data, path): 227 def _renderObject(self, data, path):
226 if hasattr(data.__class__, 'debug_render_func'): 228 if hasattr(data.__class__, 'debug_render_func'):
238 if (hasattr(data, '__iter__') and 240 if (hasattr(data, '__iter__') and
239 hasattr(data.__class__, 'debug_render_items') and 241 hasattr(data.__class__, 'debug_render_items') and
240 data.__class__.debug_render_items): 242 data.__class__.debug_render_items):
241 rendered_count = self._renderIterable(data, path, 243 rendered_count = self._renderIterable(data, path,
242 lambda d: enumerate(d)) 244 lambda d: enumerate(d))
243 if rendered_count == 0: 245 if (rendered_count == 0 and
246 not hasattr(data.__class__, 'debug_render_not_empty')):
244 self._writeLine('<p style="%s %s">(empty)</p>' % (CSS_P, CSS_DOC)) 247 self._writeLine('<p style="%s %s">(empty)</p>' % (CSS_P, CSS_DOC))
245 248
246 elif rendered_attrs == 0: 249 elif (rendered_attrs == 0 and
250 not hasattr(data.__class__, 'debug_render_not_empty')):
247 self._writeLine('<p style="%s %s">(empty)</p>' % (CSS_P, CSS_DOC)) 251 self._writeLine('<p style="%s %s">(empty)</p>' % (CSS_P, CSS_DOC))
248 252
249 self._writeLine('</div>') 253 self._writeLine('</div>')
250 254
251 def _renderIterable(self, data, path, iter_func): 255 def _renderIterable(self, data, path, iter_func):
262 266
263 def _renderDoc(self, data, path): 267 def _renderDoc(self, data, path):
264 if hasattr(data.__class__, 'debug_render_doc'): 268 if hasattr(data.__class__, 'debug_render_doc'):
265 self._writeLine('<span style="%s">&ndash; %s</span>' % 269 self._writeLine('<span style="%s">&ndash; %s</span>' %
266 (CSS_DOC, data.__class__.debug_render_doc)) 270 (CSS_DOC, data.__class__.debug_render_doc))
271
272 if hasattr(data.__class__, 'debug_render_doc_dynamic'):
273 drdd = data.__class__.debug_render_doc_dynamic
274 for ng in drdd:
275 doc = getattr(data, ng)
276 self._writeLine('<span style="%s">&ndash; %s</span>' %
277 (CSS_DOC, doc()))
267 278
268 doc = self.external_docs.get(path) 279 doc = self.external_docs.get(path)
269 if doc is not None: 280 if doc is not None:
270 self._writeLine('<span style="%s">&ndash; %s</span>' % 281 self._writeLine('<span style="%s">&ndash; %s</span>' %
271 (CSS_DOC, doc)) 282 (CSS_DOC, doc))