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]
### Fixed
- No duplicate `GroupBySource` entries in `vgroups` filter (while keeping sort order)
## [0.9.9] 2022-12-21
### 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 typing import TYPE_CHECKING, Set, List, Union, Iterable, Iterator
from typing import TYPE_CHECKING, Set, Dict, Union, Iterable, Iterator
import weakref
from .util import split_strip
if TYPE_CHECKING:
@@ -68,7 +68,9 @@ class VGroups:
GroupByRef.of(builder).make_once(keys) # ensure did cluster before use
# find groups
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:
page = proc_list.pop(0)
if recursive and hasattr(page, 'children'):
@@ -80,7 +82,7 @@ class VGroups:
continue
if keys and vobj().config.key not in keys:
continue
done_list.append(vobj())
done_list[vobj()] = None # we only need the keys()
# manage config dependencies
deps = set() # type: Set[str]