Mercurial > piecrust2
diff piecrust/data/linker.py @ 408:fd8e39254da0
debug: Better debug info output for iterators, providers, and linkers.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Mon, 25 May 2015 18:37:34 -0700 |
parents | 27b10024f8d8 |
children | e7b865f8f335 |
line wrap: on
line diff
--- a/piecrust/data/linker.py Mon May 25 18:36:44 2015 -0700 +++ b/piecrust/data/linker.py Mon May 25 18:37:34 2015 -0700 @@ -12,15 +12,22 @@ """ Entry template data to get access to related pages from a given root page. """ + debug_render = ['parent', 'ancestors', 'siblings', 'children', 'root', + 'forpath'] + debug_render_invoke = ['parent', 'siblings', 'children'] + def __init__(self, source, page_path): self._source = source self._root_page_path = page_path self._linker = None + self._is_loaded = False @property def parent(self): self._load() - return self._linker.parent + if self._linker is not None: + return self._linker.parent + return None @property def ancestors(self): @@ -32,11 +39,15 @@ @property def siblings(self): self._load() + if self._linker is None: + return [] return self._linker @property def children(self): self._load() + if self._linker is None: + return [] self._linker._load() if self._linker._self_item is None: return [] @@ -48,14 +59,24 @@ @property def root(self): self._load() + if self._linker is None: + return None return self._linker.root def forpath(self, rel_path): self._load() + if self._linker is None: + return None return self._linker.forpath(rel_path) def _load(self): - if self._linker is not None: + if self._is_loaded: + return + + self._is_loaded = True + + is_listable = isinstance(self._source, IListableSource) + if not is_listable: return dir_path = self._source.getDirpath(self._root_page_path) @@ -69,7 +90,10 @@ `Paginator` and other page iterators, but with a few additional data like hierarchical data. """ - debug_render = ['is_dir', 'is_self'] + PaginationData.debug_render + debug_render = (['is_dir', 'is_self', 'parent', 'children'] + + PaginationData.debug_render) + debug_render_invoke = (['is_dir', 'is_self', 'parent', 'children'] + + PaginationData.debug_render_invoke) def __init__(self, page): super(LinkedPageData, self).__init__(page)