Skip to content

Commit dc1e389

Browse files
committed
add test_rules.py
1 parent 4223aa7 commit dc1e389

12 files changed

Lines changed: 557 additions & 627 deletions

File tree

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

Lines changed: 34 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,8 @@ async def create_rule(
135135
)
136136
conditions_request = [
137137
UpdateConditionRequest(
138-
expression=expression_proto, actions=[create.action._to_update_request()]
138+
expression=expression_proto,
139+
actions=[create.action._to_update_request()],
139140
)
140141
]
141142
update_request = UpdateRuleRequest(
@@ -183,9 +184,7 @@ def _update_rule_request_from_update(
183184
"asset_tag_ids",
184185
]
185186
# Need to manually copy fields that will be reset even if not provided in update dict.
186-
copy_unset_fields = [
187-
"description",
188-
]
187+
copy_unset_fields = ["description", "name"]
189188

190189
# Populate the trivial fields first.
191190
update_dict.update(
@@ -214,15 +213,17 @@ def _update_rule_request_from_update(
214213
"Expression and channel_references must both be provided or both be None"
215214
)
216215
expression_proto = RuleConditionExpression(
217-
calculated_channel=CalculatedChannelConfig(
218-
expression=expression,
219-
channel_references={
220-
c.channel_reference: ChannelReferenceProto(name=c.channel_identifier)
221-
for c in channel_references
222-
},
216+
calculated_channel=(
217+
CalculatedChannelConfig(
218+
expression=expression,
219+
channel_references={
220+
c.channel_reference: ChannelReferenceProto(name=c.channel_identifier)
221+
for c in channel_references
222+
},
223+
)
224+
if expression
225+
else None
223226
)
224-
if expression
225-
else None
226227
)
227228
conditions_request = [
228229
UpdateConditionRequest(
@@ -238,10 +239,10 @@ def _update_rule_request_from_update(
238239

239240
# This always needs to be set, so handle the defaults.
240241
update_dict["asset_configuration"] = RuleAssetConfiguration( # type: ignore
241-
asset_ids=update.asset_ids if "asset_ids" in model_dump else rule.asset_ids or [],
242-
tag_ids=update.asset_tag_ids
243-
if "asset_tag_ids" in model_dump
244-
else rule.asset_tag_ids or [],
242+
asset_ids=(update.asset_ids if "asset_ids" in model_dump else rule.asset_ids or []),
243+
tag_ids=(
244+
update.asset_tag_ids if "asset_tag_ids" in model_dump else rule.asset_tag_ids or []
245+
),
245246
)
246247

247248
update_request = UpdateRuleRequest(
@@ -254,7 +255,7 @@ def _update_rule_request_from_update(
254255
async def update_rule(
255256
self, rule: Rule, update: RuleUpdate, version_notes: str | None = None
256257
) -> Rule:
257-
"""Update a rule.
258+
"""Update a rule. Also handles archive/unarchive to behave similar to other low-level clients.
258259
259260
Args:
260261
rule: The rule to update.
@@ -264,14 +265,26 @@ async def update_rule(
264265
Returns:
265266
The updated Rule.
266267
"""
268+
269+
should_update_archive = "is_archived" in update.model_fields_set
270+
267271
update.resource_id = rule.id_
272+
if not should_update_archive or (
273+
should_update_archive and len(update.model_fields_set) > 1
274+
):
275+
update_request = self._update_rule_request_from_update(rule, update, version_notes)
276+
277+
response = await self._grpc_client.get_stub(RuleServiceStub).UpdateRule(update_request)
278+
_ = cast("UpdateRuleResponse", response)
268279

269-
update_request = self._update_rule_request_from_update(rule, update, version_notes)
280+
if should_update_archive:
281+
if update.is_archived:
282+
await self.archive_rule(rule_id=rule.id_)
283+
else:
284+
await self.unarchive_rule(rule_id=rule.id_)
270285

271-
response = await self._grpc_client.get_stub(RuleServiceStub).UpdateRule(update_request)
272-
updated_grpc_rule = cast("UpdateRuleResponse", response)
273286
# Get the updated rule
274-
return await self.get_rule(rule_id=updated_grpc_rule.rule_id)
287+
return await self.get_rule(rule_id=rule.id_)
275288

276289
async def batch_update_rules(self, rules: list[RuleUpdate]) -> BatchUpdateRulesResponse:
277290
"""Batch update rules.

python/lib/sift_client/_tests/integrated/calculated_channels.py

Lines changed: 0 additions & 251 deletions
This file was deleted.

0 commit comments

Comments
 (0)