Mercurial > piecrust2
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">– %s</span>' % | 269 self._writeLine('<span style="%s">– %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">– %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">– %s</span>' % | 281 self._writeLine('<span style="%s">– %s</span>' % |
271 (CSS_DOC, doc)) | 282 (CSS_DOC, doc)) |