@@ -435,7 +435,7 @@ def delete_role(self, role_name: str) -> dict:
435435 KeycloakError: If the resulting response is not a successful HTTP-Code (>299)
436436 """
437437 return self ._admin_request (url = f'{ self .roles_uri } /{ role_name } ' , method = HTTPMethod .DELETE )
438-
438+
439439 @result_or_error (response_model = KeycloakGroup , is_list = True )
440440 def get_all_groups (self ) -> List [KeycloakGroup ]:
441441 """ Get all base groups of the Keycloak realm
@@ -446,8 +446,8 @@ def get_all_groups(self) -> List[KeycloakGroup]:
446446 Raises:
447447 KeycloakError: If the resulting response is not a successful HTTP-Code (>299)
448448 """
449- return self ._admin_request (url = self .groups_uri , method = HTTPMethod .GET )
450-
449+ return self ._admin_request (url = self .groups_uri , method = HTTPMethod .GET )
450+
451451 @result_or_error (response_model = KeycloakGroup , is_list = True )
452452 def get_groups (self , group_names : List [str ]) -> List [KeycloakGroup ] or None :
453453 """ Returns full entries of base Groups based on group names
@@ -464,8 +464,8 @@ def get_groups(self, group_names: List[str]) -> List[KeycloakGroup] or None:
464464 if group_names is None :
465465 return None
466466 groups = self .get_all_groups ()
467- return list (filter (lambda group : group .name in group_names , groups ))
468-
467+ return list (filter (lambda group : group .name in group_names , groups ))
468+
469469 def get_subgroups (self , group : KeycloakGroup , path : str ):
470470 """Utility function to iterate through nested group structures
471471
@@ -485,7 +485,7 @@ def get_subgroups(self, group: KeycloakGroup, path: str):
485485 return subgroups
486486 # Went through the tree without hits
487487 return None
488-
488+
489489 @result_or_error (response_model = KeycloakGroup )
490490 def get_group_by_path (self , path : str , search_in_subgroups = True ) -> KeycloakGroup or None :
491491 """ Return Group based on path
@@ -501,7 +501,7 @@ def get_group_by_path(self, path: str, search_in_subgroups=True) -> KeycloakGrou
501501 KeycloakError: If the resulting response is not a successful HTTP-Code (>299)
502502 """
503503 groups = self .get_all_groups ()
504-
504+
505505 for group in groups :
506506 if group .path == path :
507507 return group
@@ -512,7 +512,7 @@ def get_group_by_path(self, path: str, search_in_subgroups=True) -> KeycloakGrou
512512 res = self .get_subgroups (group , path )
513513 if res is not None :
514514 return res
515-
515+
516516 @result_or_error (response_model = KeycloakGroup )
517517 def get_group (self , group_id : str ) -> KeycloakGroup or None :
518518 """ Return Group based on group id
@@ -530,8 +530,8 @@ def get_group(self, group_id: str) -> KeycloakGroup or None:
530530 Raises:
531531 KeycloakError: If the resulting response is not a successful HTTP-Code (>299)
532532 """
533- return self ._admin_request (url = f'{ self .groups_uri } /{ group_id } ' , method = HTTPMethod .GET )
534-
533+ return self ._admin_request (url = f'{ self .groups_uri } /{ group_id } ' , method = HTTPMethod .GET )
534+
535535 @result_or_error (response_model = KeycloakGroup )
536536 def create_group (self , group_name : str , parent : Union [KeycloakGroup , str ] = None ) -> KeycloakGroup :
537537 """ Create a group on the realm
@@ -546,24 +546,24 @@ def create_group(self, group_name: str, parent: Union[KeycloakGroup, str] = None
546546 Raises:
547547 KeycloakError: If the resulting response is not a successful HTTP-Code (>299)
548548 """
549-
549+
550550 # If it's an objetc id get an instance of the object
551551 if isinstance (parent , str ):
552552 parent = self .get_group (parent )
553-
553+
554554 if parent is not None :
555555 groups_uri = f'{ self .groups_uri } /{ parent .id } /children'
556556 path = f'{ parent .path } /{ group_name } '
557557 else :
558558 groups_uri = self .groups_uri
559559 path = f'/{ group_name } '
560-
560+
561561 response = self ._admin_request (url = groups_uri , data = {'name' : group_name }, method = HTTPMethod .POST )
562562 if response .status_code == 201 :
563563 return self .get_group_by_path (path = path , search_in_subgroups = True )
564564 else :
565- return response
566-
565+ return response
566+
567567 @result_or_error ()
568568 def delete_group (self , group_id : str ) -> dict :
569569 """ Deletes a group on the realm
@@ -577,7 +577,7 @@ def delete_group(self, group_id: str) -> dict:
577577 Raises:
578578 KeycloakError: If the resulting response is not a successful HTTP-Code (>299)
579579 """
580- return self ._admin_request (url = f'{ self .groups_uri } /{ group_id } ' , method = HTTPMethod .DELETE )
580+ return self ._admin_request (url = f'{ self .groups_uri } /{ group_id } ' , method = HTTPMethod .DELETE )
581581
582582 @result_or_error ()
583583 def add_user_group (self , user_id : str , group_id : str ) -> dict :
@@ -609,7 +609,7 @@ def get_user_groups(self, user_id: str) -> List[KeycloakGroup]:
609609 KeycloakError: If the resulting response is not a successful HTTP-Code (>299)
610610 """
611611 return self ._admin_request (url = f'{ self .users_uri } /{ user_id } /groups' , method = HTTPMethod .GET )
612-
612+
613613 @result_or_error ()
614614 def remove_user_group (self , user_id : str , group_id : str ) -> dict :
615615 """ Remove group from a specific user
@@ -624,7 +624,7 @@ def remove_user_group(self, user_id: str, group_id: str) -> dict:
624624 Raises:
625625 KeycloakError: If the resulting response is not a successful HTTP-Code (>299)
626626 """
627- return self ._admin_request (url = f'{ self .users_uri } /{ user_id } /groups/{ group_id } ' , method = HTTPMethod .DELETE )
627+ return self ._admin_request (url = f'{ self .users_uri } /{ user_id } /groups/{ group_id } ' , method = HTTPMethod .DELETE )
628628
629629 @result_or_error (response_model = KeycloakUser )
630630 def create_user (
@@ -660,13 +660,16 @@ def create_user(
660660 Raises:
661661 KeycloakError: If the resulting response is not a successful HTTP-Code (>299)
662662 """
663+ initial_roles = self .get_roles (initial_roles )
664+ initial_roles_json = [role .dict () for role in initial_roles ]
665+
663666 data = {
664667 "email" : email ,
665668 "username" : username ,
666669 "firstName" : first_name ,
667670 "lastName" : last_name ,
668671 "enabled" : enabled ,
669- "clientRoles" : self . get_roles ( initial_roles ) ,
672+ "clientRoles" : initial_roles_json ,
670673 "credentials" : [
671674 {
672675 "temporary" : False ,
@@ -939,7 +942,7 @@ def users_uri(self):
939942 def roles_uri (self ):
940943 """ The roles endpoint URL """
941944 return self .admin_uri (resource = "roles" )
942-
945+
943946 @functools .cached_property
944947 def groups_uri (self ):
945948 """ The groups endpoint URL """
0 commit comments