fix: yield unique vgroups while keeping sort order

This commit is contained in:
relikd
2022-12-21 19:22:59 +01:00
parent 4689e9fccb
commit 7039fb3a63
2 changed files with 10 additions and 4 deletions

View File

@@ -7,11 +7,15 @@ and this project does adhere to [Semantic Versioning](https://semver.org/spec/v2
## [Unreleased] ## [Unreleased]
### Fixed
- No duplicate `GroupBySource` entries in `vgroups` filter (while keeping sort order)
## [0.9.9] 2022-12-21 ## [0.9.9] 2022-12-21
### Fixed ### Fixed
- Keep original sorting order in `vgroups` filter if no `order_by` is set. - Keep original sorting order in `vgroups` filter if no `order_by` is set

View File

@@ -1,5 +1,5 @@
from lektor.context import get_ctx from lektor.context import get_ctx
from typing import TYPE_CHECKING, Set, List, Union, Iterable, Iterator from typing import TYPE_CHECKING, Set, Dict, Union, Iterable, Iterator
import weakref import weakref
from .util import split_strip from .util import split_strip
if TYPE_CHECKING: if TYPE_CHECKING:
@@ -68,7 +68,9 @@ class VGroups:
GroupByRef.of(builder).make_once(keys) # ensure did cluster before use GroupByRef.of(builder).make_once(keys) # ensure did cluster before use
# find groups # find groups
proc_list = [record] proc_list = [record]
done_list = [] # type: List[GroupBySource] # Note: An ordered Set would be more approptiate but there is none.
# So lets use the insert order of dict (guaranteed since Python 3.7)
done_list = {} # type: Dict[GroupBySource, None]
while proc_list: while proc_list:
page = proc_list.pop(0) page = proc_list.pop(0)
if recursive and hasattr(page, 'children'): if recursive and hasattr(page, 'children'):
@@ -80,7 +82,7 @@ class VGroups:
continue continue
if keys and vobj().config.key not in keys: if keys and vobj().config.key not in keys:
continue continue
done_list.append(vobj()) done_list[vobj()] = None # we only need the keys()
# manage config dependencies # manage config dependencies
deps = set() # type: Set[str] deps = set() # type: Set[str]