Skip to content

Commit f129281

Browse files
committed
fix
1 parent 048b13a commit f129281

File tree

2 files changed

+29
-5
lines changed

2 files changed

+29
-5
lines changed

src/sentry/workflow_engine/processors/data_condition_group.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,18 +41,20 @@ class TriggerResult:
4141

4242
@staticmethod
4343
def any(items: Iterable["TriggerResult"]) -> "TriggerResult":
44-
for _ in (item for item in items if item.triggered and item.error is None):
44+
items_list = list(items)
45+
for _ in (item for item in items_list if item.triggered and item.error is None):
4546
return TriggerResult(triggered=True, error=None)
4647
# If we didn't have any untained Trues, the result is tainted.
47-
some_error = next((item.error for item in items if item.error is not None), None)
48-
return TriggerResult(triggered=any(item.triggered for item in items), error=some_error)
48+
some_error = next((item.error for item in items_list if item.error is not None), None)
49+
return TriggerResult(triggered=any(item.triggered for item in items_list), error=some_error)
4950

5051
@staticmethod
5152
def all(items: Iterable["TriggerResult"]) -> "TriggerResult":
52-
some_error = next((item.error for item in items if item.error is not None), None)
53+
items_list = list(items)
54+
some_error = next((item.error for item in items_list if item.error is not None), None)
5355
# if anything was tainted, the result is tainted.
5456
return TriggerResult(
55-
triggered=all(item.triggered for item in items),
57+
triggered=all(item.triggered for item in items_list),
5658
error=some_error,
5759
)
5860

tests/sentry/workflow_engine/processors/test_data_condition_group.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -546,3 +546,25 @@ def test_all_all_false_untainted_returns_untainted_false(self):
546546
result = TriggerResult.all(items)
547547
assert result.triggered is False
548548
assert result.error is None
549+
550+
def test_any_with_generator_preserves_error(self):
551+
error = ConditionError(msg="test error")
552+
items = [
553+
TriggerResult(triggered=False, error=None),
554+
TriggerResult(triggered=False, error=error),
555+
TriggerResult(triggered=False, error=None),
556+
]
557+
result = TriggerResult.any(item for item in items)
558+
assert result.triggered is False
559+
assert result.error == error
560+
561+
def test_all_with_generator_preserves_error(self):
562+
error = ConditionError(msg="test error")
563+
items = [
564+
TriggerResult(triggered=True, error=None),
565+
TriggerResult(triggered=True, error=error),
566+
TriggerResult(triggered=True, error=None),
567+
]
568+
result = TriggerResult.all(item for item in items)
569+
assert result.triggered is True
570+
assert result.error == error

0 commit comments

Comments
 (0)