@@ -192,6 +192,27 @@ async def assign_user_role(
192192 )
193193
194194
195+ @facts_router .delete ("/users/{user_id}/roles" )
196+ async def unassign_user_role (
197+ request : FastApiRequest ,
198+ client : FactsClientDependency ,
199+ update_subscriber : DataUpdateSubscriberDependency ,
200+ wait_timeout : WaitTimeoutDependency ,
201+ timeout_policy : TimeoutPolicyDependency ,
202+ user_id : str ,
203+ ):
204+ return await forward_request_then_wait_for_update (
205+ client ,
206+ request ,
207+ update_subscriber ,
208+ wait_timeout ,
209+ path = f"/users/{ user_id } /roles" ,
210+ query_params = {"return_deleted" : True },
211+ entries_callback = create_role_assignment_data_entries ,
212+ timeout_policy = timeout_policy ,
213+ )
214+
215+
195216@facts_router .post ("/role_assignments" )
196217async def create_role_assignment (
197218 request : FastApiRequest ,
@@ -211,6 +232,26 @@ async def create_role_assignment(
211232 )
212233
213234
235+ @facts_router .delete ("/role_assignments" )
236+ async def delete_role_assignment (
237+ request : FastApiRequest ,
238+ client : FactsClientDependency ,
239+ update_subscriber : DataUpdateSubscriberDependency ,
240+ wait_timeout : WaitTimeoutDependency ,
241+ timeout_policy : TimeoutPolicyDependency ,
242+ ):
243+ return await forward_request_then_wait_for_update (
244+ client ,
245+ request ,
246+ update_subscriber ,
247+ wait_timeout ,
248+ path = "/role_assignments" ,
249+ entries_callback = create_role_assignment_data_entries ,
250+ timeout_policy = timeout_policy ,
251+ query_params = {"return_deleted" : True },
252+ )
253+
254+
214255@facts_router .post ("/resource_instances" )
215256async def create_resource_instance (
216257 request : FastApiRequest ,
@@ -293,6 +334,12 @@ async def create_relationship_tuple(
293334 )
294335
295336
337+ def cast_delete_200_to_204 (response : Response ) -> Response :
338+ if response .status_code == 200 :
339+ return Response (status_code = 204 )
340+ return response
341+
342+
296343async def forward_request_then_wait_for_update (
297344 client : FactsClient ,
298345 request : FastApiRequest ,
@@ -303,9 +350,10 @@ async def forward_request_then_wait_for_update(
303350 update_id : UUID | None = None ,
304351 entries_callback : Callable [[FastApiRequest , dict [str , Any ], UUID | None ], Iterable [DataSourceEntry ]],
305352 timeout_policy : TimeoutPolicy = TimeoutPolicy .IGNORE ,
353+ query_params : dict [str , Any ] | None = None ,
306354) -> Response :
307355 _update_id = update_id or uuid4 ()
308- response = await client .send_forward_request (request , path )
356+ response = await client .send_forward_request (request , path , query_params = query_params )
309357 body = client .extract_body (response )
310358 if body is None :
311359 return client .convert_response (response )
0 commit comments