equal
deleted
inserted
replaced
65 Look up a child by name, returning None if not found |
65 Look up a child by name, returning None if not found |
66 """ |
66 """ |
67 |
67 |
68 return dict((c.name, c) for c in self.children).get(name) |
68 return dict((c.name, c) for c in self.children).get(name) |
69 |
69 |
|
70 def get_ancestry (self) : |
|
71 """ |
|
72 Returns a list of this page's parents and the page itself, but not root |
|
73 """ |
|
74 |
|
75 # collect in reverse order |
|
76 ancestry = [] |
|
77 |
|
78 # starting from self |
|
79 item = self |
|
80 |
|
81 # add all items, but not root |
|
82 while item and item.parent : |
|
83 ancestry.append(item) |
|
84 |
|
85 item = item.parent |
|
86 |
|
87 # reverse |
|
88 ancestry.reverse() |
|
89 |
|
90 # done |
|
91 return ancestry |
|
92 |
70 @property |
93 @property |
71 def url (self) : |
94 def url (self) : |
72 """ |
95 """ |
73 Build this page's URL |
96 Build this page's URL |
74 """ |
97 """ |
75 |
98 |
76 # cached? |
99 # cached? |
77 if self._url : |
100 if self._url : |
78 return self._url |
101 return self._url |
79 |
102 |
80 # collect URL segments in reverse order |
103 segments = [item.name for item in self.get_ancestry()] |
81 segments = [] |
104 |
82 |
|
83 # add empty segment if dir |
105 # add empty segment if dir |
84 if self.children : |
106 if self.children : |
85 segments.append('') |
107 segments.append('') |
86 |
108 |
87 # iterate over ancestry |
|
88 item = self |
|
89 |
|
90 # add all parent names, but not root's |
|
91 while item and item.parent : |
|
92 segments.append(item.name) |
|
93 |
|
94 item = item.parent |
|
95 |
|
96 # reverse segments |
|
97 segments.reverse() |
|
98 |
|
99 # join |
109 # join |
100 url = '/'.join(segments) |
110 url = '/'.join(segments) |
101 |
111 |
102 # cache |
112 # cache |
103 self._url = url |
113 self._url = url |