lib/page.py
changeset 12 2abc5ace0b15
parent 11 fa216534ae45
child 13 178ea40bbc44
equal deleted inserted replaced
11:fa216534ae45 12:2abc5ace0b15
    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