From 6f170e0cd203f85e5450c8af59b58dfc3fc2c275 Mon Sep 17 00:00:00 2001 From: Antoine Rabany Date: Wed, 24 Jan 2024 12:50:35 +0100 Subject: [PATCH] feat(group): use iterable when possible --- remoulade/composition.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/remoulade/composition.py b/remoulade/composition.py index 9b1f11ba4..b292bfc61 100644 --- a/remoulade/composition.py +++ b/remoulade/composition.py @@ -17,6 +17,7 @@ from __future__ import annotations from collections import namedtuple +from collections.abc import Iterator from contextlib import nullcontext from typing import TYPE_CHECKING, Any, Generic, Iterable, TypeVar, Union, cast, overload @@ -147,7 +148,7 @@ def build(self, *, last_options=None, composition_id: str = None, cancel_on_erro options["cancel_on_error"] = cancel_on_error if isinstance(child, group): - next_child = child.build(options) + next_child = list(child.build(options)) else: next_child = [child.build(options)] @@ -258,7 +259,7 @@ def __len__(self) -> int: def __str__(self) -> str: # pragma: no cover return f"group({', '.join(str(child) for child in self.children)})" - def build(self, options=None) -> list[Message]: + def build(self, options=None) -> Iterator[Message]: """Build group for pipeline""" if options is None: options = {} @@ -273,15 +274,13 @@ def build(self, options=None) -> list[Message]: "cancel_on_error": self.cancel_on_error, **options, } - messages: list[Message] = [] for group_child in self.children: if isinstance(group_child, pipeline): - messages += group_child.build( + yield from group_child.build( last_options=options, composition_id=composition_id, cancel_on_error=cancel_on_error ) else: - messages += [group_child.build(options)] - return messages + yield group_child.build(options) @property def info(self) -> GroupInfo: