Skip to content

Commit 0b5d1d1

Browse files
authored
Add support for live rule field in sift-client (#463)
1 parent 12f58c8 commit 0b5d1d1

4 files changed

Lines changed: 14 additions & 5 deletions

File tree

python/lib/sift_client/_internal/low_level_wrappers/rules.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,10 +124,10 @@ def _update_rule_request_from_create(self, create: RuleCreate) -> UpdateRuleRequ
124124
update_request = UpdateRuleRequest(
125125
name=create.name,
126126
description=create.description,
127-
is_enabled=True,
128127
organization_id=create.organization_id or "",
129128
client_key=create.client_key,
130129
is_external=create.is_external,
130+
is_live_evaluation_enabled=create.evaluate_on_live_data,
131131
conditions=conditions_request,
132132
asset_configuration=RuleAssetConfiguration(
133133
asset_ids=create.asset_ids or [],
@@ -207,6 +207,7 @@ def _update_rule_request_from_update(
207207
"contextual_channels",
208208
"asset_ids",
209209
"asset_tag_ids",
210+
"evaluate_on_live_data",
210211
]
211212
# Need to manually copy fields that will be reset even if not provided in update dict.
212213
copy_unset_fields = ["description", "name"]
@@ -262,6 +263,11 @@ def _update_rule_request_from_update(
262263
channels=[ChannelReferenceProto(name=c) for c in update.contextual_channels or []]
263264
)
264265

266+
# Map is_live (class field) to is_live_evaluation_enabled (proto field)
267+
update_dict["is_live_evaluation_enabled"] = model_dump.get(
268+
"evaluate_on_live_data", rule.evaluate_on_live_data
269+
)
270+
265271
# This always needs to be set, so handle the defaults.
266272
update_dict["asset_configuration"] = RuleAssetConfiguration( # type: ignore
267273
asset_ids=(update.asset_ids if "asset_ids" in model_dump else rule.asset_ids or []),

python/lib/sift_client/_tests/resources/test_rules.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,6 @@ async def test_update_rule_description(self, rules_api_async, new_rule):
335335
assert updated_rule.description == "Updated description"
336336
# Validate that things we didn't intentionally change didn't change
337337
assert updated_rule.name == new_rule.name
338-
assert updated_rule.is_enabled == new_rule.is_enabled
339338
assert updated_rule.is_external == new_rule.is_external
340339
assert updated_rule.expression == new_rule.expression
341340
assert updated_rule.action.action_type == new_rule.action.action_type

python/lib/sift_client/_tests/sift_types/test_rule.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ def mock_rule(mock_client):
2323
id_="test_rule_id",
2424
name="test_rule",
2525
description="test description",
26-
is_enabled=True,
2726
created_date=datetime.now(timezone.utc),
2827
modified_date=datetime.now(timezone.utc),
2928
created_by_user_id="user1",
@@ -46,6 +45,8 @@ def mock_rule(mock_client):
4645
client_key=None,
4746
rule_version=None,
4847
archived_date=None,
48+
evaluate_on_live_data=False,
49+
current_version_id="test_version_id",
4950
)
5051
rule._apply_client_to_instance(mock_client)
5152
return rule

python/lib/sift_client/sift_types/rule.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,15 @@ class Rule(BaseType[RuleProto, "Rule"]):
4545
# Required fields
4646
name: str
4747
description: str
48-
is_enabled: bool
4948
created_date: datetime
5049
modified_date: datetime
5150
created_by_user_id: str
5251
modified_by_user_id: str
5352
organization_id: str
5453
is_archived: bool
5554
is_external: bool
55+
evaluate_on_live_data: bool
56+
current_version_id: str
5657

5758
# Optional fields
5859
expression: str | None
@@ -135,7 +136,6 @@ def _from_proto(cls, proto: RuleProto, sift_client: SiftClient | None = None) ->
135136
].expression.calculated_channel.channel_references.items()
136137
],
137138
action=RuleAction._from_proto(proto.conditions[0].actions[0]),
138-
is_enabled=proto.is_enabled,
139139
created_date=proto.created_date.ToDatetime(tzinfo=timezone.utc),
140140
modified_date=proto.modified_date.ToDatetime(tzinfo=timezone.utc),
141141
created_by_user_id=proto.created_by_user_id,
@@ -153,6 +153,8 @@ def _from_proto(cls, proto: RuleProto, sift_client: SiftClient | None = None) ->
153153
),
154154
is_archived=proto.is_archived,
155155
is_external=proto.is_external,
156+
evaluate_on_live_data=proto.is_live_evaluation_enabled,
157+
current_version_id=proto.current_version_id,
156158
_client=sift_client,
157159
)
158160

@@ -166,6 +168,7 @@ class RuleCreateUpdateBase(ModelCreateUpdateBase):
166168
asset_tag_ids: list[str] | None = None
167169
contextual_channels: list[str] | None = None
168170
is_external: bool = False
171+
evaluate_on_live_data: bool = False
169172

170173

171174
class RuleCreate(RuleCreateUpdateBase, ModelCreate[CreateRuleRequest]):

0 commit comments

Comments
 (0)