# HG changeset patch # User Ludovic Chabant # Date 1430703808 25200 # Node ID 2408eb6f4da80319b633c2b9fa4e247edc0cee19 # Parent 734f2abf361cccfc629fb244e91faf648f40793b linker: Don't put linker stuff in the config. Now that we want to deep-copy configuration, we can't put objects in there. We create a wrapper for pages that will store linker-specific objects in a separate attribute. diff -r 734f2abf361c -r 2408eb6f4da8 piecrust/data/linker.py --- a/piecrust/data/linker.py Sun May 03 18:42:29 2015 -0700 +++ b/piecrust/data/linker.py Sun May 03 18:43:28 2015 -0700 @@ -25,7 +25,7 @@ self._linker._load() if self._linker._self_item is None: return None - return self._linker._self_item.config.get('__linker_child') + return self._linker._self_item._linker_info.child_linker @property def root(self): @@ -45,9 +45,9 @@ def __init__(self, page): super(LinkedPageData, self).__init__(page) - self.name = page.config.get('__linker_name') - self.is_self = page.config.get('__linker_is_self') - self.children = page.config.get('__linker_child') + self.name = page._linker_info.name + self.is_self = page._linker_info.is_self + self.children = page._linker_info.child_linker self.is_dir = (self.children is not None) self.is_page = True @@ -100,6 +100,22 @@ return None +class _LinkerInfo(object): + def __init__(self): + self.name = None + self.is_self = False + self.child_linker = None + + +class _LinkedPage(object): + def __init__(self, page): + self._page = page + self._linker_info = _LinkerInfo() + + def __getattr__(self, name): + return getattr(self._page, name) + + class Linker(object): debug_render_doc = """Provides access to sibling and children pages.""" @@ -200,10 +216,11 @@ item = Linker(self._source, self._root_page_path, name=name, dir_path=data) else: - item = data.buildPage() - is_self = (item.rel_path == self._root_page_path) - item.config.set('__linker_name', name) - item.config.set('__linker_is_self', is_self) + page = data.buildPage() + is_self = (page.rel_path == self._root_page_path) + item = _LinkedPage(page) + item._linker_info.name = name + item._linker_info.is_self = is_self if is_self: self._self_item = item @@ -213,11 +230,11 @@ elif is_dir: # The current item is a directory. The existing item # should be a page. - existing.config.set('__linker_child', item) + existing._linker_info.child_linker = item else: # The current item is a page. The existing item should # be a directory. - item.config.set('__linker_child', existing) + item._linker_info.child_linker = existing self._items[name] = item