diff --git a/fgs/datatypes.py b/fgs/datatypes.py index 994977403e568e824ac2583192c9fd4b5f147e74..de7c6637d71889147a895d378caa0d785aa781cf 100644 --- a/fgs/datatypes.py +++ b/fgs/datatypes.py @@ -218,7 +218,14 @@ class Page: return res - def __lt__(self, other): + def get_prio(self): + if 'prio' in self.metadata: + return self.metadata['prio'] + else: + return 0 + prio = property(get_prio, None, None) + + def __lt__(self, other): # for sorting by date modified (default) if not self.initialized: raise Exception("Page not initialized.") return self.date_modified < other.date_modified @@ -245,10 +252,11 @@ class Tag: self.name = name self.lang = lang self._config = None - self.pages = set() + self.pages_tuple = [] self.is_category = False self._link = None self._factories = factories + self._pages_cache = [] def get_config(self): @@ -291,11 +299,23 @@ class Tag: return if page.lang != self.lang: raise Exception("Page has different lang than Tag.", page.lang, tag.lang) - self.pages.add(page) + if page not in self.pages: + self.pages_tuple.append((page.prio, page)) + self.pages_tuple.sort(key=lambda x: x[0]) + self.pages_tuple.reverse() if is_category: self.is_category = is_category + def get_pages(self): + if len(self._pages_cache) != len(self.pages_tuple): + res = [] + for prio, page in self.pages_tuple: + res.append(page) + self._pages_cache = res + return self._pages_cache + pages = property(get_pages, None, None) + class Date: def __init__(self, dt, config): if isinstance(dt, str):