Mercurial > piecrust2
annotate piecrust/data/linker.py @ 1055:7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
* Add `root` and `myself`.
* Return groups as part of the children.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Wed, 31 Jan 2018 08:53:27 -0800 |
parents | 8adc27285d93 |
children | f6b975db2545 |
rev | line source |
---|---|
172
4fc1d306046b
linker: Actually implement the `Linker` class, and use it in the page data.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
1 import logging |
440
32c7c2d219d2
performance: Refactor how data is managed to reduce copying.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
2 from piecrust.data.paginationdata import PaginationData |
854
08e02c2a2a1a
core: Keep refactoring, this time to prepare for generator sources.
Ludovic Chabant <ludovic@chabant.com>
parents:
853
diff
changeset
|
3 from piecrust.sources.base import ( |
977
84fc72a17f7a
sources: Changes in related contents management.
Ludovic Chabant <ludovic@chabant.com>
parents:
866
diff
changeset
|
4 REL_PARENT_GROUP, REL_LOGICAL_PARENT_ITEM, REL_LOGICAl_CHILD_GROUP) |
172
4fc1d306046b
linker: Actually implement the `Linker` class, and use it in the page data.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
5 |
4fc1d306046b
linker: Actually implement the `Linker` class, and use it in the page data.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
6 |
4fc1d306046b
linker: Actually implement the `Linker` class, and use it in the page data.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
7 logger = logging.getLogger(__name__) |
4fc1d306046b
linker: Actually implement the `Linker` class, and use it in the page data.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
8 |
4fc1d306046b
linker: Actually implement the `Linker` class, and use it in the page data.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
9 |
854
08e02c2a2a1a
core: Keep refactoring, this time to prepare for generator sources.
Ludovic Chabant <ludovic@chabant.com>
parents:
853
diff
changeset
|
10 _unloaded = object() |
08e02c2a2a1a
core: Keep refactoring, this time to prepare for generator sources.
Ludovic Chabant <ludovic@chabant.com>
parents:
853
diff
changeset
|
11 |
08e02c2a2a1a
core: Keep refactoring, this time to prepare for generator sources.
Ludovic Chabant <ludovic@chabant.com>
parents:
853
diff
changeset
|
12 |
08e02c2a2a1a
core: Keep refactoring, this time to prepare for generator sources.
Ludovic Chabant <ludovic@chabant.com>
parents:
853
diff
changeset
|
13 class Linker: |
08e02c2a2a1a
core: Keep refactoring, this time to prepare for generator sources.
Ludovic Chabant <ludovic@chabant.com>
parents:
853
diff
changeset
|
14 """ A template-exposed data class that lets the user navigate the |
08e02c2a2a1a
core: Keep refactoring, this time to prepare for generator sources.
Ludovic Chabant <ludovic@chabant.com>
parents:
853
diff
changeset
|
15 logical hierarchy of pages in a page source. |
247
d9d5c5de02a8
data: Add a top level wrapper for `Linker`.
Ludovic Chabant <ludovic@chabant.com>
parents:
242
diff
changeset
|
16 """ |
408
fd8e39254da0
debug: Better debug info output for iterators, providers, and linkers.
Ludovic Chabant <ludovic@chabant.com>
parents:
404
diff
changeset
|
17 debug_render = ['parent', 'ancestors', 'siblings', 'children', 'root', |
fd8e39254da0
debug: Better debug info output for iterators, providers, and linkers.
Ludovic Chabant <ludovic@chabant.com>
parents:
404
diff
changeset
|
18 'forpath'] |
590
3cca1f6bd610
debug: Fix how the linker shows children/siblings/etc. in the debug window.
Ludovic Chabant <ludovic@chabant.com>
parents:
518
diff
changeset
|
19 debug_render_invoke = ['parent', 'ancestors', 'siblings', 'children', |
3cca1f6bd610
debug: Fix how the linker shows children/siblings/etc. in the debug window.
Ludovic Chabant <ludovic@chabant.com>
parents:
518
diff
changeset
|
20 'root'] |
3cca1f6bd610
debug: Fix how the linker shows children/siblings/etc. in the debug window.
Ludovic Chabant <ludovic@chabant.com>
parents:
518
diff
changeset
|
21 debug_render_redirect = { |
852
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
590
diff
changeset
|
22 'ancestors': '_debugRenderAncestors', |
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
590
diff
changeset
|
23 'siblings': '_debugRenderSiblings', |
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
590
diff
changeset
|
24 'children': '_debugRenderChildren', |
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
590
diff
changeset
|
25 'root': '_debugRenderRoot'} |
408
fd8e39254da0
debug: Better debug info output for iterators, providers, and linkers.
Ludovic Chabant <ludovic@chabant.com>
parents:
404
diff
changeset
|
26 |
866
d9059257743c
refactor: Make the linker work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
862
diff
changeset
|
27 def __init__(self, source, content_item): |
d9059257743c
refactor: Make the linker work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
862
diff
changeset
|
28 self._source = source |
d9059257743c
refactor: Make the linker work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
862
diff
changeset
|
29 self._content_item = content_item |
854
08e02c2a2a1a
core: Keep refactoring, this time to prepare for generator sources.
Ludovic Chabant <ludovic@chabant.com>
parents:
853
diff
changeset
|
30 |
866
d9059257743c
refactor: Make the linker work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
862
diff
changeset
|
31 self._parent_group = _unloaded |
854
08e02c2a2a1a
core: Keep refactoring, this time to prepare for generator sources.
Ludovic Chabant <ludovic@chabant.com>
parents:
853
diff
changeset
|
32 self._ancestors = None |
08e02c2a2a1a
core: Keep refactoring, this time to prepare for generator sources.
Ludovic Chabant <ludovic@chabant.com>
parents:
853
diff
changeset
|
33 self._siblings = None |
08e02c2a2a1a
core: Keep refactoring, this time to prepare for generator sources.
Ludovic Chabant <ludovic@chabant.com>
parents:
853
diff
changeset
|
34 self._children = None |
404
27b10024f8d8
linker: Add ability to return the parent and ancestors of a page.
Ludovic Chabant <ludovic@chabant.com>
parents:
402
diff
changeset
|
35 |
27b10024f8d8
linker: Add ability to return the parent and ancestors of a page.
Ludovic Chabant <ludovic@chabant.com>
parents:
402
diff
changeset
|
36 @property |
27b10024f8d8
linker: Add ability to return the parent and ancestors of a page.
Ludovic Chabant <ludovic@chabant.com>
parents:
402
diff
changeset
|
37 def parent(self): |
866
d9059257743c
refactor: Make the linker work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
862
diff
changeset
|
38 a = self.ancestors |
d9059257743c
refactor: Make the linker work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
862
diff
changeset
|
39 if a: |
d9059257743c
refactor: Make the linker work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
862
diff
changeset
|
40 return a[0] |
d9059257743c
refactor: Make the linker work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
862
diff
changeset
|
41 return None |
404
27b10024f8d8
linker: Add ability to return the parent and ancestors of a page.
Ludovic Chabant <ludovic@chabant.com>
parents:
402
diff
changeset
|
42 |
27b10024f8d8
linker: Add ability to return the parent and ancestors of a page.
Ludovic Chabant <ludovic@chabant.com>
parents:
402
diff
changeset
|
43 @property |
1055
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
44 def root(self): |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
45 a = self.ancestors |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
46 if a: |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
47 return a[-1] |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
48 return self.myself |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
49 |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
50 @property |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
51 def myself(self): |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
52 page = self._source.app.getPage(self._source, self._content_item) |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
53 return self._makePageData(page) |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
54 |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
55 @property |
404
27b10024f8d8
linker: Add ability to return the parent and ancestors of a page.
Ludovic Chabant <ludovic@chabant.com>
parents:
402
diff
changeset
|
56 def ancestors(self): |
854
08e02c2a2a1a
core: Keep refactoring, this time to prepare for generator sources.
Ludovic Chabant <ludovic@chabant.com>
parents:
853
diff
changeset
|
57 if self._ancestors is None: |
866
d9059257743c
refactor: Make the linker work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
862
diff
changeset
|
58 src = self._source |
d9059257743c
refactor: Make the linker work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
862
diff
changeset
|
59 app = src.app |
d9059257743c
refactor: Make the linker work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
862
diff
changeset
|
60 |
854
08e02c2a2a1a
core: Keep refactoring, this time to prepare for generator sources.
Ludovic Chabant <ludovic@chabant.com>
parents:
853
diff
changeset
|
61 self._ancestors = [] |
977
84fc72a17f7a
sources: Changes in related contents management.
Ludovic Chabant <ludovic@chabant.com>
parents:
866
diff
changeset
|
62 cur_group = self._getParentGroup() |
866
d9059257743c
refactor: Make the linker work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
862
diff
changeset
|
63 while cur_group: |
d9059257743c
refactor: Make the linker work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
862
diff
changeset
|
64 pi = src.getRelatedContents(cur_group, |
d9059257743c
refactor: Make the linker work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
862
diff
changeset
|
65 REL_LOGICAL_PARENT_ITEM) |
854
08e02c2a2a1a
core: Keep refactoring, this time to prepare for generator sources.
Ludovic Chabant <ludovic@chabant.com>
parents:
853
diff
changeset
|
66 if pi is not None: |
866
d9059257743c
refactor: Make the linker work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
862
diff
changeset
|
67 pipage = app.getPage(src, pi) |
1055
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
68 self._ancestors.append(self._makePageData(pipage)) |
977
84fc72a17f7a
sources: Changes in related contents management.
Ludovic Chabant <ludovic@chabant.com>
parents:
866
diff
changeset
|
69 cur_group = src.getRelatedContents( |
84fc72a17f7a
sources: Changes in related contents management.
Ludovic Chabant <ludovic@chabant.com>
parents:
866
diff
changeset
|
70 pi, REL_PARENT_GROUP) |
854
08e02c2a2a1a
core: Keep refactoring, this time to prepare for generator sources.
Ludovic Chabant <ludovic@chabant.com>
parents:
853
diff
changeset
|
71 else: |
08e02c2a2a1a
core: Keep refactoring, this time to prepare for generator sources.
Ludovic Chabant <ludovic@chabant.com>
parents:
853
diff
changeset
|
72 break |
08e02c2a2a1a
core: Keep refactoring, this time to prepare for generator sources.
Ludovic Chabant <ludovic@chabant.com>
parents:
853
diff
changeset
|
73 return self._ancestors |
247
d9d5c5de02a8
data: Add a top level wrapper for `Linker`.
Ludovic Chabant <ludovic@chabant.com>
parents:
242
diff
changeset
|
74 |
d9d5c5de02a8
data: Add a top level wrapper for `Linker`.
Ludovic Chabant <ludovic@chabant.com>
parents:
242
diff
changeset
|
75 @property |
d9d5c5de02a8
data: Add a top level wrapper for `Linker`.
Ludovic Chabant <ludovic@chabant.com>
parents:
242
diff
changeset
|
76 def siblings(self): |
977
84fc72a17f7a
sources: Changes in related contents management.
Ludovic Chabant <ludovic@chabant.com>
parents:
866
diff
changeset
|
77 src = self._source |
84fc72a17f7a
sources: Changes in related contents management.
Ludovic Chabant <ludovic@chabant.com>
parents:
866
diff
changeset
|
78 app = src.app |
84fc72a17f7a
sources: Changes in related contents management.
Ludovic Chabant <ludovic@chabant.com>
parents:
866
diff
changeset
|
79 for i in self._getAllSiblings(): |
979
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
977
diff
changeset
|
80 if not i.is_group: |
977
84fc72a17f7a
sources: Changes in related contents management.
Ludovic Chabant <ludovic@chabant.com>
parents:
866
diff
changeset
|
81 ipage = app.getPage(src, i) |
1055
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
82 ipage_data = self._makePageData(ipage) |
979
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
977
diff
changeset
|
83 yield ipage_data |
1055
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
84 else: |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
85 yield self._makeGroupData(i) |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
86 |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
87 @property |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
88 def has_children(self): |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
89 return bool(self.children) |
247
d9d5c5de02a8
data: Add a top level wrapper for `Linker`.
Ludovic Chabant <ludovic@chabant.com>
parents:
242
diff
changeset
|
90 |
d9d5c5de02a8
data: Add a top level wrapper for `Linker`.
Ludovic Chabant <ludovic@chabant.com>
parents:
242
diff
changeset
|
91 @property |
d9d5c5de02a8
data: Add a top level wrapper for `Linker`.
Ludovic Chabant <ludovic@chabant.com>
parents:
242
diff
changeset
|
92 def children(self): |
977
84fc72a17f7a
sources: Changes in related contents management.
Ludovic Chabant <ludovic@chabant.com>
parents:
866
diff
changeset
|
93 src = self._source |
84fc72a17f7a
sources: Changes in related contents management.
Ludovic Chabant <ludovic@chabant.com>
parents:
866
diff
changeset
|
94 app = src.app |
84fc72a17f7a
sources: Changes in related contents management.
Ludovic Chabant <ludovic@chabant.com>
parents:
866
diff
changeset
|
95 for i in self._getAllChildren(): |
84fc72a17f7a
sources: Changes in related contents management.
Ludovic Chabant <ludovic@chabant.com>
parents:
866
diff
changeset
|
96 if not i.is_group: |
84fc72a17f7a
sources: Changes in related contents management.
Ludovic Chabant <ludovic@chabant.com>
parents:
866
diff
changeset
|
97 ipage = app.getPage(src, i) |
1055
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
98 yield self._makePageData(ipage) |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
99 else: |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
100 yield self._makeGroupData(i) |
404
27b10024f8d8
linker: Add ability to return the parent and ancestors of a page.
Ludovic Chabant <ludovic@chabant.com>
parents:
402
diff
changeset
|
101 |
866
d9059257743c
refactor: Make the linker work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
862
diff
changeset
|
102 def forpath(self, path): |
d9059257743c
refactor: Make the linker work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
862
diff
changeset
|
103 # TODO: generalize this for sources that aren't file-system based. |
989
8adc27285d93
bake: Big pass on bake performance.
Ludovic Chabant <ludovic@chabant.com>
parents:
979
diff
changeset
|
104 item = self._source.findContentFromSpec({'slug': path}) |
866
d9059257743c
refactor: Make the linker work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
862
diff
changeset
|
105 return Linker(self._source, item) |
d9059257743c
refactor: Make the linker work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
862
diff
changeset
|
106 |
d9059257743c
refactor: Make the linker work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
862
diff
changeset
|
107 def childrenof(self, path): |
d9059257743c
refactor: Make the linker work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
862
diff
changeset
|
108 # TODO: generalize this for sources that aren't file-system based. |
d9059257743c
refactor: Make the linker work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
862
diff
changeset
|
109 src = self._source |
d9059257743c
refactor: Make the linker work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
862
diff
changeset
|
110 app = src.app |
989
8adc27285d93
bake: Big pass on bake performance.
Ludovic Chabant <ludovic@chabant.com>
parents:
979
diff
changeset
|
111 group = src.findContentFromSpec(path) |
866
d9059257743c
refactor: Make the linker work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
862
diff
changeset
|
112 if group is not None: |
989
8adc27285d93
bake: Big pass on bake performance.
Ludovic Chabant <ludovic@chabant.com>
parents:
979
diff
changeset
|
113 if not group.is_group: |
8adc27285d93
bake: Big pass on bake performance.
Ludovic Chabant <ludovic@chabant.com>
parents:
979
diff
changeset
|
114 raise Exception("'%s' is not a folder/group." % path) |
866
d9059257743c
refactor: Make the linker work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
862
diff
changeset
|
115 for i in src.getContents(group): |
d9059257743c
refactor: Make the linker work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
862
diff
changeset
|
116 if not i.is_group: |
d9059257743c
refactor: Make the linker work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
862
diff
changeset
|
117 ipage = app.getPage(src, i) |
1055
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
118 yield self._makePageData(ipage) |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
119 else: |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
120 yield self._makeGroupData(i) |
866
d9059257743c
refactor: Make the linker work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
862
diff
changeset
|
121 return None |
d9059257743c
refactor: Make the linker work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
862
diff
changeset
|
122 |
977
84fc72a17f7a
sources: Changes in related contents management.
Ludovic Chabant <ludovic@chabant.com>
parents:
866
diff
changeset
|
123 def _getAllSiblings(self): |
84fc72a17f7a
sources: Changes in related contents management.
Ludovic Chabant <ludovic@chabant.com>
parents:
866
diff
changeset
|
124 if self._siblings is None: |
84fc72a17f7a
sources: Changes in related contents management.
Ludovic Chabant <ludovic@chabant.com>
parents:
866
diff
changeset
|
125 self._siblings = list(self._source.getContents( |
84fc72a17f7a
sources: Changes in related contents management.
Ludovic Chabant <ludovic@chabant.com>
parents:
866
diff
changeset
|
126 self._getParentGroup())) |
84fc72a17f7a
sources: Changes in related contents management.
Ludovic Chabant <ludovic@chabant.com>
parents:
866
diff
changeset
|
127 return self._siblings |
84fc72a17f7a
sources: Changes in related contents management.
Ludovic Chabant <ludovic@chabant.com>
parents:
866
diff
changeset
|
128 |
84fc72a17f7a
sources: Changes in related contents management.
Ludovic Chabant <ludovic@chabant.com>
parents:
866
diff
changeset
|
129 def _getAllChildren(self): |
84fc72a17f7a
sources: Changes in related contents management.
Ludovic Chabant <ludovic@chabant.com>
parents:
866
diff
changeset
|
130 if self._children is None: |
84fc72a17f7a
sources: Changes in related contents management.
Ludovic Chabant <ludovic@chabant.com>
parents:
866
diff
changeset
|
131 child_group = self._source.getRelatedContents( |
84fc72a17f7a
sources: Changes in related contents management.
Ludovic Chabant <ludovic@chabant.com>
parents:
866
diff
changeset
|
132 self._content_item, REL_LOGICAl_CHILD_GROUP) |
84fc72a17f7a
sources: Changes in related contents management.
Ludovic Chabant <ludovic@chabant.com>
parents:
866
diff
changeset
|
133 if child_group is not None: |
84fc72a17f7a
sources: Changes in related contents management.
Ludovic Chabant <ludovic@chabant.com>
parents:
866
diff
changeset
|
134 self._children = list( |
84fc72a17f7a
sources: Changes in related contents management.
Ludovic Chabant <ludovic@chabant.com>
parents:
866
diff
changeset
|
135 self._source.getContents(child_group)) |
84fc72a17f7a
sources: Changes in related contents management.
Ludovic Chabant <ludovic@chabant.com>
parents:
866
diff
changeset
|
136 else: |
84fc72a17f7a
sources: Changes in related contents management.
Ludovic Chabant <ludovic@chabant.com>
parents:
866
diff
changeset
|
137 self._children = [] |
84fc72a17f7a
sources: Changes in related contents management.
Ludovic Chabant <ludovic@chabant.com>
parents:
866
diff
changeset
|
138 return self._children |
84fc72a17f7a
sources: Changes in related contents management.
Ludovic Chabant <ludovic@chabant.com>
parents:
866
diff
changeset
|
139 |
84fc72a17f7a
sources: Changes in related contents management.
Ludovic Chabant <ludovic@chabant.com>
parents:
866
diff
changeset
|
140 def _getParentGroup(self): |
866
d9059257743c
refactor: Make the linker work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
862
diff
changeset
|
141 if self._parent_group is _unloaded: |
977
84fc72a17f7a
sources: Changes in related contents management.
Ludovic Chabant <ludovic@chabant.com>
parents:
866
diff
changeset
|
142 self._parent_group = self._source.getRelatedContents( |
84fc72a17f7a
sources: Changes in related contents management.
Ludovic Chabant <ludovic@chabant.com>
parents:
866
diff
changeset
|
143 self._content_item, REL_PARENT_GROUP) |
84fc72a17f7a
sources: Changes in related contents management.
Ludovic Chabant <ludovic@chabant.com>
parents:
866
diff
changeset
|
144 return self._parent_group |
866
d9059257743c
refactor: Make the linker work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
862
diff
changeset
|
145 |
1055
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
146 def _makePageData(self, page): |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
147 return _PageData(self, page) |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
148 |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
149 def _makeGroupData(self, group): |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
150 return _GroupData(self._source, group) |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
151 |
590
3cca1f6bd610
debug: Fix how the linker shows children/siblings/etc. in the debug window.
Ludovic Chabant <ludovic@chabant.com>
parents:
518
diff
changeset
|
152 def _debugRenderAncestors(self): |
866
d9059257743c
refactor: Make the linker work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
862
diff
changeset
|
153 return [i.title for i in self.ancestors] |
590
3cca1f6bd610
debug: Fix how the linker shows children/siblings/etc. in the debug window.
Ludovic Chabant <ludovic@chabant.com>
parents:
518
diff
changeset
|
154 |
3cca1f6bd610
debug: Fix how the linker shows children/siblings/etc. in the debug window.
Ludovic Chabant <ludovic@chabant.com>
parents:
518
diff
changeset
|
155 def _debugRenderSiblings(self): |
866
d9059257743c
refactor: Make the linker work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
862
diff
changeset
|
156 return [i.title for i in self.siblings] |
590
3cca1f6bd610
debug: Fix how the linker shows children/siblings/etc. in the debug window.
Ludovic Chabant <ludovic@chabant.com>
parents:
518
diff
changeset
|
157 |
3cca1f6bd610
debug: Fix how the linker shows children/siblings/etc. in the debug window.
Ludovic Chabant <ludovic@chabant.com>
parents:
518
diff
changeset
|
158 def _debugRenderChildren(self): |
866
d9059257743c
refactor: Make the linker work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
862
diff
changeset
|
159 return [i.title for i in self.children] |
590
3cca1f6bd610
debug: Fix how the linker shows children/siblings/etc. in the debug window.
Ludovic Chabant <ludovic@chabant.com>
parents:
518
diff
changeset
|
160 |
1055
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
161 |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
162 class _PageData(PaginationData): |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
163 def __init__(self, linker, page): |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
164 super().__init__(page) |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
165 self._linker = linker |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
166 |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
167 def _load(self): |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
168 super()._load() |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
169 self._mapValue('is_page', True) |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
170 self._mapValue( |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
171 'is_self', |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
172 self._page.content_spec == self._linker._content_item.spec) |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
173 |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
174 self._mapLoader('is_dir', lambda d, n: self._linker.has_children) |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
175 self._mapLoader('is_group', lambda d, n: self._linker.has_children) |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
176 |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
177 |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
178 class _GroupData: |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
179 def __init__(self, source, group_item): |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
180 self._source = source |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
181 self._group_item = group_item |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
182 self.is_page = False |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
183 self.is_dir = True |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
184 self.is_group = True |
7e4742a60d14
data: Add new properties and folder support to the `family` data endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
989
diff
changeset
|
185 self.family = Linker(source, group_item) |