44
55from sift_client ._internal .low_level_wrappers .rules import RulesLowLevelClient
66from sift_client .resources ._base import ResourceBase
7- from sift_client .sift_types .rule import Rule , RuleAction , RuleUpdate
7+ from sift_client .sift_types .rule import Rule , RuleCreate , RuleUpdate
88from sift_client .util import cel_utils as cel
99
1010if TYPE_CHECKING :
1111 import re
1212
1313 from sift_client .client import SiftClient
14- from sift_client .sift_types .channel import ChannelReference
1514
1615
1716class RulesAPIAsync (ResourceBase ):
@@ -124,34 +123,28 @@ async def find(self, **kwargs) -> Rule | None:
124123
125124 async def create (
126125 self ,
127- name : str ,
128- description : str ,
129- expression : str ,
130- channel_references : list [ChannelReference ],
131- action : RuleAction ,
132- organization_id : str | None = None ,
133- client_key : str | None = None ,
134- asset_ids : list [str ] | None = None ,
135- contextual_channels : list [str ] | None = None ,
136- is_external : bool = False ,
126+ create : RuleCreate | dict ,
137127 ) -> Rule :
138- """Create a new rule."""
139- created_rule = await self ._low_level_client .create_rule (
140- name = name ,
141- description = description ,
142- organization_id = organization_id ,
143- expression = expression ,
144- action = action ,
145- channel_references = channel_references ,
146- client_key = client_key ,
147- asset_ids = asset_ids ,
148- contextual_channels = contextual_channels ,
149- is_external = is_external ,
150- )
128+ """Create a new rule.
129+
130+ Args:
131+ create: A RuleCreate object or dictionary with configuration for the new rule.
132+
133+ Returns:
134+ The created Rule.
135+ """
136+ if isinstance (create , dict ):
137+ create = RuleCreate .model_validate (create )
138+
139+ created_rule = await self ._low_level_client .create_rule (create = create )
151140 return self ._apply_client_to_instance (created_rule )
152141
153142 async def update (
154- self , rule : str | Rule , update : RuleUpdate | dict , version_notes : str | None = None
143+ self ,
144+ rule : Rule | str ,
145+ update : RuleUpdate | dict ,
146+ * ,
147+ version_notes : str | None = None ,
155148 ) -> Rule :
156149 """Update a Rule.
157150
@@ -172,63 +165,27 @@ async def update(
172165 updated_rule = await self ._low_level_client .update_rule (rule , update , version_notes )
173166 return self ._apply_client_to_instance (updated_rule )
174167
175- async def archive (
176- self ,
177- * ,
178- rule : str | Rule | None = None ,
179- client_key : str | None = None ,
180- rules : list [Rule ] | None = None ,
181- rule_ids : list [str ] | None = None ,
182- client_keys : list [str ] | None = None ,
183- ) -> None :
184- """Archive a rule or multiple.
168+ async def archive (self , rule : str | Rule ) -> Rule :
169+ """Archive a rule.
185170
186171 Args:
187- rule: The Rule to archive.
188- client_key: The client key or the Rule to archive.
189- rules: The Rules to archive.
190- rule_ids: The rule IDs to archive.
191- client_keys: The client keys of the Rules tp archive.
172+ rule: The id or Rule object of the rule to archive.
173+
174+ Returns:
175+ The archived Rule.
192176 """
193- if rule or client_key :
194- rule_id = rule ._id_or_error if isinstance (rule , Rule ) else rule
195- return await self ._low_level_client .archive_rule (rule_id = rule_id , client_key = client_key )
196- elif rules or rule_ids or client_keys :
197- rule_ids = rule_ids or [rule ._id_or_error for rule in rules ]
198- return await self ._low_level_client .batch_archive_rules (
199- rule_ids = rule_ids , client_keys = client_keys
200- )
201- else :
202- raise ValueError ("Either rule or rules must be provided" )
203-
204- async def unarchive (
205- self ,
206- * ,
207- rule : str | Rule | None = None ,
208- client_key : str | None = None ,
209- rules : list [Rule ] | None = None ,
210- rule_ids : list [str ] | None = None ,
211- client_keys : list [str ] | None = None ,
212- ) -> None :
213- """Unarchive a Rule or multiple.
214-
215- Args:
216- rule: The Rule to restore.
217- client_key: The client key of the Rule to restore.
218- rules: The Rules to restore.
219- rule_ids: The rule IDs to restore.
220- client_keys: The client keys of the Rules to restore.
221- """
222- if rule or client_key :
223- rule_id = rule ._id_or_error if isinstance (rule , Rule ) else rule
224- return await self ._low_level_client .unarchive_rule (rule_id = rule_id , client_key = client_key )
225- elif rules or rule_ids or client_keys :
226- rule_ids = rule_ids or [rule ._id_or_error for rule in rules ]
227- return await self ._low_level_client .batch_unarchive_rules (
228- rule_ids = rule_ids , client_keys = client_keys
229- )
230- else :
231- raise ValueError ("Either rule or rules must be provided" )
177+ return await self .update (rule = rule , update = RuleUpdate (is_archived = True ))
178+
179+ async def unarchive (self , rule : str | Rule ) -> Rule :
180+ """Unarchive a rule.
181+
182+ Args:
183+ rule: The id or Rule object of the rule to unarchive.
184+
185+ Returns:
186+ The unarchived Rule.
187+ """
188+ return await self .update (rule = rule , update = RuleUpdate (is_archived = False ))
232189
233190
234191
0 commit comments