1414
1515
1616class ProcedureEndpoint (EndpointBase ):
17- def create_in_alert (
18- self , alert_id : str , procedure : InputProcedure
17+ def create_in_case (
18+ self , case_id : str , procedure : InputProcedure
1919 ) -> OutputProcedure :
20+ """Create a procedure in a case.
21+
22+ Args:
23+ case_id: The id of the case.
24+ procedure: The fields of the procedure to create.
25+
26+ Returns:
27+ The created procedure.
28+ """
2029 return self ._session .make_request (
21- "POST" , path = f"/api/v1/alert/ { alert_id } /procedure" , json = procedure
30+ "POST" , path = f"/api/v1/case/ { case_id } /procedure" , json = procedure
2231 )
2332
24- def create_in_case (
25- self , case_id : str , procedure : InputProcedure
33+ def bulk_create_in_case (
34+ self , case_id : str , procedures : List [InputProcedure ]
35+ ) -> List [OutputProcedure ]:
36+ """Create several procedures in a case.
37+
38+ Args:
39+ case_id: The id of the case.
40+ procedures: The list of procedures to create.
41+
42+ Returns:
43+ The list of created procedures.
44+ """
45+ return self ._session .make_request (
46+ "POST" ,
47+ path = f"/api/v1/case/{ case_id } /procedures" ,
48+ json = {"procedures" : procedures },
49+ )
50+
51+ def create_in_alert (
52+ self , alert_id : str , procedure : InputProcedure
2653 ) -> OutputProcedure :
54+ """Create a procedure in an alert.
55+
56+ Args:
57+ alert_id: The id of the alert.
58+ procedure: The fields of the procedure to create.
59+
60+ Returns:
61+ The created procedure.
62+ """
2763 return self ._session .make_request (
28- "POST" , path = f"/api/v1/case/ { case_id } /procedure" , json = procedure
64+ "POST" , path = f"/api/v1/alert/ { alert_id } /procedure" , json = procedure
2965 )
3066
31- def get (self , procedure_id : str ) -> OutputProcedure :
32- # TODO: temp implementation until a dedicated get endpoint
33- procedures = self ._session .make_request (
67+ def bulk_create_in_alert (
68+ self , alert_id : str , procedures : List [InputProcedure ]
69+ ) -> List [OutputProcedure ]:
70+ """Create multiple procedures in an alert.
71+
72+ Args:
73+ alert_id: The id of the alert.
74+ procedures: The list of procedures to create.
75+
76+ Returns:
77+ The list of created procedures.
78+ """
79+ return self ._session .make_request (
3480 "POST" ,
35- path = "/api/v1/query " ,
36- json = {"query " : [{ "_name" : "getProcedure" , "idOrName" : procedure_id }] },
81+ path = f "/api/v1/alert/ { alert_id } /procedures " ,
82+ json = {"procedures " : procedures },
3783 )
38- try :
39- return procedures [0 ]
40- except IndexError :
41- raise TheHiveError ("404 - Procedure not found" )
4284
4385 def delete (self , procedure_id : str ) -> None :
86+ """Delete a procedure.
87+
88+ Args:
89+ procedure_id: The id of the procedure.
90+
91+ Returns:
92+ N/A
93+ """
4494 return self ._session .make_request (
4595 "DELETE" , path = f"/api/v1/procedure/{ procedure_id } "
4696 )
4797
4898 def update (self , procedure_id : str , fields : InputUpdateProcedure ) -> None :
99+ """Update a procedure.
100+
101+ Args:
102+ procedure_id: The id of the procedure.
103+ fields: The fields of the procedure to update.
104+
105+ Returns:
106+ N/A
107+ """
49108 return self ._session .make_request (
50109 "PATCH" , path = f"/api/v1/procedure/{ procedure_id } " , json = fields
51110 )
52111
112+ def bulk_delete (self , procedure_ids : List [str ]) -> None :
113+ """Delete multiple procedures.
114+
115+ Args:
116+ procedure_ids: The list of procedure ids to delete.
117+
118+ Returns:
119+ N/A
120+ """
121+ return self ._session .make_request (
122+ "POST" ,
123+ path = "/api/v1/procedure/delete/_bulk" ,
124+ json = {"ids" : procedure_ids },
125+ )
126+
53127 def find (
54128 self ,
55129 filters : Optional [FilterExpr ] = None ,
56130 sortby : Optional [SortExpr ] = None ,
57131 paginate : Optional [Paginate ] = None ,
58132 ) -> List [OutputProcedure ]:
133+ """Find multiple procedures.
134+
135+ Args:
136+ filters: The filter expressions to apply in the query.
137+ sortby: The sort expressions to apply in the query.
138+ paginate: The pagination expression to apply in the query.
139+
140+ Returns:
141+ The list of procedures matched by the query or an empty list.
142+ """
59143 query : QueryExpr = [
60144 {"_name" : "listProcedure" },
61145 * self ._build_subquery (filters = filters , sortby = sortby , paginate = paginate ),
@@ -67,3 +151,23 @@ def find(
67151 params = {"name" : "procedures" },
68152 json = {"query" : query },
69153 )
154+
155+ def get (self , procedure_id : str ) -> OutputProcedure :
156+ """Get a procedure by id.
157+
158+ Args:
159+ procedure_id: The id of the procedure.
160+
161+ Returns:
162+ The procedure specified by the id.
163+ """
164+ # TODO: temp implementation until a dedicated get endpoint
165+ procedures = self ._session .make_request (
166+ "POST" ,
167+ path = "/api/v1/query" ,
168+ json = {"query" : [{"_name" : "getProcedure" , "idOrName" : procedure_id }]},
169+ )
170+ try :
171+ return procedures [0 ]
172+ except IndexError :
173+ raise TheHiveError ("404 - Procedure not found" )
0 commit comments