2121 RoleAssignmentRead ,
2222 RoleAssignmentRemove ,
2323 UserCreate ,
24+ UserCreateBulkOperation ,
25+ UserCreateBulkOperationResult ,
26+ UserDeleteBulkOperation ,
27+ UserDeleteBulkOperationResult ,
2428 UserRead ,
29+ UserReplaceBulkOperation ,
30+ UserReplaceBulkOperationResult ,
2531 UserUpdate ,
2632)
2733
@@ -45,6 +51,15 @@ def __role_assignments(self) -> SimpleHttpClient:
4551 )
4652 )
4753
54+ @property
55+ def __bulk_operations (self ) -> SimpleHttpClient :
56+ return self ._build_http_client (
57+ "/v2/facts/{proj_id}/{env_id}/bulk/users" .format (
58+ proj_id = self .config .api_context .project ,
59+ env_id = self .config .api_context .environment ,
60+ )
61+ )
62+
4863 @required_permissions (ApiKeyAccessLevel .ENVIRONMENT_LEVEL_API_KEY )
4964 @required_context (ApiContextLevel .ENVIRONMENT )
5065 @validate_arguments
@@ -211,6 +226,82 @@ async def delete(self, user_key: str) -> None:
211226 """
212227 return await self .__users .delete (f"/{ user_key } " )
213228
229+ @required_permissions (ApiKeyAccessLevel .ENVIRONMENT_LEVEL_API_KEY )
230+ @required_context (ApiContextLevel .ENVIRONMENT )
231+ @validate_arguments
232+ async def bulk_create (
233+ self , users : List [UserCreate ]
234+ ) -> UserCreateBulkOperationResult :
235+ """
236+ Creates users in bulk.
237+
238+ Args:
239+ users: The users to create
240+
241+ Returns:
242+ the bulk creation report.
243+
244+ Raises:
245+ PermitApiError: If the API returns an error HTTP status code.
246+ PermitContextError: If the configured ApiContext does not match the required endpoint context.
247+ """
248+ return await self .__bulk_operations .post (
249+ "" ,
250+ model = UserCreateBulkOperationResult ,
251+ json = UserCreateBulkOperation (operations = users ),
252+ )
253+
254+ @required_permissions (ApiKeyAccessLevel .ENVIRONMENT_LEVEL_API_KEY )
255+ @required_context (ApiContextLevel .ENVIRONMENT )
256+ @validate_arguments
257+ async def bulk_replace (
258+ self , users : List [UserCreate ]
259+ ) -> UserReplaceBulkOperationResult :
260+ """
261+ Replaces users in bulk.
262+
263+ If the user exists - replaces it.
264+ Otherwise creates previously non-existing users.
265+
266+ Args:
267+ users: The users to replace.
268+
269+ Returns:
270+ the bulk replace report.
271+
272+ Raises:
273+ PermitApiError: If the API returns an error HTTP status code.
274+ PermitContextError: If the configured ApiContext does not match the required endpoint context.
275+ """
276+ return await self .__bulk_operations .put (
277+ "" ,
278+ model = UserReplaceBulkOperationResult ,
279+ json = UserReplaceBulkOperation (operations = users ),
280+ )
281+
282+ @required_permissions (ApiKeyAccessLevel .ENVIRONMENT_LEVEL_API_KEY )
283+ @required_context (ApiContextLevel .ENVIRONMENT )
284+ @validate_arguments
285+ async def bulk_delete (self , users : List [str ]) -> UserDeleteBulkOperationResult :
286+ """
287+ Deletes users in bulk.
288+
289+ Args:
290+ users: The users identities to delete. Each identity can be either the user key or the user id.
291+
292+ Returns:
293+ the bulk delete report.
294+
295+ Raises:
296+ PermitApiError: If the API returns an error HTTP status code.
297+ PermitContextError: If the configured ApiContext does not match the required endpoint context.
298+ """
299+ return await self .__bulk_operations .delete (
300+ "" ,
301+ model = UserDeleteBulkOperationResult ,
302+ json = UserDeleteBulkOperation (idents = users ),
303+ )
304+
214305 @required_permissions (ApiKeyAccessLevel .ENVIRONMENT_LEVEL_API_KEY )
215306 @required_context (ApiContextLevel .ENVIRONMENT )
216307 @validate_arguments
0 commit comments