Skip to content

Commit 39aa934

Browse files
committed
feat: add BATCH_COMMIT_COMMANDS effect
Add BatchCommitCommandEffect and _commit_payload_for_batch() to enable committing multiple commands in a single batch operation, mirroring the existing BATCH_ORIGINATE_COMMANDS pattern.
1 parent 07b3cae commit 39aa934

File tree

7 files changed

+58
-2
lines changed

7 files changed

+58
-2
lines changed

canvas_generated/messages/effects_pb2.py

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

canvas_generated/messages/effects_pb2.pyi

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,7 @@ class EffectType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
324324
REVENUE__PAYMENT_PROCESSOR__PAYMENT_METHOD__REMOVE_RESPONSE: _ClassVar[EffectType]
325325
GENERATE_FULL_CHART_PDF: _ClassVar[EffectType]
326326
BATCH_ORIGINATE_COMMANDS: _ClassVar[EffectType]
327+
BATCH_COMMIT_COMMANDS: _ClassVar[EffectType]
327328
CALENDAR__CREATE: _ClassVar[EffectType]
328329
CALENDAR__EVENT__CREATE: _ClassVar[EffectType]
329330
CALENDAR__EVENT__UPDATE: _ClassVar[EffectType]
@@ -652,6 +653,7 @@ REVENUE__PAYMENT_PROCESSOR__PAYMENT_METHOD__ADD_RESPONSE: EffectType
652653
REVENUE__PAYMENT_PROCESSOR__PAYMENT_METHOD__REMOVE_RESPONSE: EffectType
653654
GENERATE_FULL_CHART_PDF: EffectType
654655
BATCH_ORIGINATE_COMMANDS: EffectType
656+
BATCH_COMMIT_COMMANDS: EffectType
655657
CALENDAR__CREATE: EffectType
656658
CALENDAR__EVENT__CREATE: EffectType
657659
CALENDAR__EVENT__UPDATE: EffectType

canvas_sdk/commands/base.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,14 @@ def _origination_payload_for_batch(self, line_number: int = -1) -> dict:
137137
"line_number": line_number,
138138
}
139139

140+
def _commit_payload_for_batch(self) -> dict:
141+
"""Commit a command for batch processing."""
142+
self._validate_before_effect("commit")
143+
return {
144+
"type": f"COMMIT_{self.constantized_key()}_COMMAND",
145+
"command": self.command_uuid,
146+
}
147+
140148
def edit(self) -> Effect:
141149
"""Edit the command."""
142150
self._validate_before_effect("edit")

canvas_sdk/effects/batch_commit.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from typing import Any
2+
3+
from pydantic import Field
4+
5+
from canvas_sdk.effects import EffectType, _BaseEffect
6+
7+
8+
class BatchCommitCommandEffect(_BaseEffect):
9+
"""An Effect that will commit multiple commands in a batch operation."""
10+
11+
class Meta:
12+
effect_type = EffectType.BATCH_COMMIT_COMMANDS
13+
14+
commands: list = Field(min_length=1)
15+
16+
@property
17+
def values(self) -> dict[str, Any]:
18+
"""The BatchCommitCommandEffect's values."""
19+
return {"commands": [command._commit_payload_for_batch() for command in self.commands]}
20+
21+
22+
__exports__ = ("BatchCommitCommandEffect",)

canvas_sdk/tests/commands/test_base_command.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,26 @@ def test_batch_originate_raises_error_when_required_fields_not_set() -> None:
131131
cmd._origination_payload_for_batch()
132132

133133

134+
def test_batch_commit_successfully_returns_dict(
135+
dummy_command_instance: DummyCommand,
136+
) -> None:
137+
"""Test that _commit_payload_for_batch() successfully returns the correct dict."""
138+
batch_payload = dummy_command_instance._commit_payload_for_batch()
139+
140+
assert batch_payload == {
141+
"type": "COMMIT_PLAN_COMMAND",
142+
"command": dummy_command_instance.command_uuid,
143+
}
144+
145+
146+
def test_batch_commit_raises_error_when_required_fields_not_set() -> None:
147+
"""Test that _commit_payload_for_batch() raises an error when a required field is not set."""
148+
cmd = DummyCommand()
149+
150+
with pytest.raises(ValueError, match="command_uuid"):
151+
cmd._commit_payload_for_batch()
152+
153+
134154
def test_commit_successfully_returns_commit_effect(
135155
dummy_command_instance: DummyCommand,
136156
) -> None:

plugin_runner/allowed-module-imports.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,9 @@
422422
"EffectType",
423423
"_BaseEffect"
424424
],
425+
"canvas_sdk.effects.batch_commit": [
426+
"BatchCommitCommandEffect"
427+
],
425428
"canvas_sdk.effects.batch_originate": [
426429
"BatchOriginateCommandEffect"
427430
],

protobufs/canvas_generated/messages/effects.proto

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,7 @@ enum EffectType {
406406
GENERATE_FULL_CHART_PDF = 6101;
407407

408408
BATCH_ORIGINATE_COMMANDS = 6024;
409+
BATCH_COMMIT_COMMANDS = 6033;
409410

410411
CALENDAR__CREATE = 8001;
411412
CALENDAR__EVENT__CREATE = 8002;

0 commit comments

Comments
 (0)