Skip to content

Commit aa0c3cb

Browse files
committed
Fix async sort filter
1 parent 01d0bab commit aa0c3cb

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

src/jinja2/filters.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -383,7 +383,7 @@ def sort_func(item: t.Tuple[t.Any, t.Any]) -> t.Any:
383383

384384

385385
@pass_environment
386-
def do_sort(
386+
def sync_do_sort(
387387
environment: "Environment",
388388
value: "t.Iterable[V]",
389389
reverse: bool = False,
@@ -438,6 +438,20 @@ def do_sort(
438438
return sorted(value, key=key_func, reverse=reverse)
439439

440440

441+
@async_variant(sync_do_sort) # type: ignore
442+
async def do_sort(
443+
environment: "Environment",
444+
value: "t.Union[t.AsyncIterable[V], t.Iterable[V]]",
445+
reverse: bool = False,
446+
case_sensitive: bool = False,
447+
attribute: t.Optional[t.Union[str, int]] = None,
448+
) -> "t.List[V]":
449+
key_func = make_multi_attrgetter(
450+
environment, attribute, postprocess=ignore_case if not case_sensitive else None
451+
)
452+
return sorted(await auto_to_list(value), key=key_func, reverse=reverse)
453+
454+
441455
@pass_environment
442456
def sync_do_unique(
443457
environment: "Environment",

tests/test_async_filters.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,12 @@ def test_simple_map(env_async, items):
218218
assert tmpl.render(items=items) == "6"
219219

220220

221+
@mark_dualiter("items", lambda: list("1423"))
222+
def test_simple_map_sort(env_async, items):
223+
tmpl = env_async.from_string('{{ items()|map("int")|sort }}')
224+
assert tmpl.render(items=items) == "[1, 2, 3, 4]"
225+
226+
221227
def test_map_sum(env_async): # async map + async filter
222228
tmpl = env_async.from_string('{{ [[1,2], [3], [4,5,6]]|map("sum")|list }}')
223229
assert tmpl.render() == "[3, 3, 15]"

0 commit comments

Comments
 (0)