From fb8321744e1d01fd3f5a1193f353362d83c39438 Mon Sep 17 00:00:00 2001 From: relikd Date: Sat, 23 Jul 2022 13:58:46 +0200 Subject: [PATCH] feat: add support for alternatives --- lektor_groupby/vobj.py | 2 +- lektor_groupby/watcher.py | 21 +++++++++++++-------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/lektor_groupby/vobj.py b/lektor_groupby/vobj.py index 05597d0..5d07c00 100644 --- a/lektor_groupby/vobj.py +++ b/lektor_groupby/vobj.py @@ -84,7 +84,7 @@ class GroupBySource(VirtualSourceObject): @property def url_path(self) -> str: # Actual path to resource as seen by the browser - return build_url([self.record.path, self.slug]) # slug can be None! + return build_url([self.record.url_path, self.slug]) # slug can be None def iter_source_filenames(self) -> Iterator[str]: ''' Enumerate all dependencies ''' diff --git a/lektor_groupby/watcher.py b/lektor_groupby/watcher.py index e3c3fd7..dcb13e7 100644 --- a/lektor_groupby/watcher.py +++ b/lektor_groupby/watcher.py @@ -48,8 +48,11 @@ class Watcher: ''' Reset internal state. You must initialize before each build! ''' assert callable(self.callback), 'No grouping callback provided.' self._model_reader = ModelReader(pad.db, self.config.key, self.flatten) - self._root_record = pad.get(self._root) # type: Record - self._state = {} # type: Dict[str, GroupBySource] + self._root_record = {} # type: Dict[str, Record] + self._state = {} # type: Dict[str, Dict[str, GroupBySource]] + for alt in pad.config.iter_alternatives(): + self._root_record[alt] = pad.get(self._root, alt=alt) + self._state[alt] = {} def should_process(self, node: 'Record') -> bool: ''' Check if record path is being watched. ''' @@ -85,12 +88,13 @@ class Watcher: else: group, extra = obj + alt = record.alt slug = self.config.slugify(group) - if slug not in self._state: - src = GroupBySource(self._root_record, slug) - self._state[slug] = src + if slug not in self._state[alt]: + src = GroupBySource(self._root_record[alt], slug) + self._state[alt][slug] = src else: - src = self._state[slug] + src = self._state[alt][slug] src.append_child(record, extra, group) # reverse reference @@ -99,8 +103,9 @@ class Watcher: def iter_sources(self, root: 'Record') -> Iterator[GroupBySource]: ''' Prepare and yield GroupBySource elements. ''' - for vobj in self._state.values(): - yield vobj.finalize(self.config) + for vobj_list in self._state.values(): + for vobj in vobj_list.values(): + yield vobj.finalize(self.config) # cleanup. remove this code if you'd like to iter twice del self._model_reader del self._root_record