in components/user_management/src/routes/user_group.py [0:0]
def update_applications_of_user_group(
uuid: str, input_group_applications: UpdateGroupApplications):
"""Assign/unassign applications of user group with the uuid passed in
the request body
### Args:
input_group_applications (UpdateGroupApplications): List of
users to be added to the user group
### Raises:
ResourceNotFoundException: If the user group does not exist
Exception: 500 Internal Server Error if something went wrong
### Returns:
UpdateApplicationsOfGroupResponseModel: UserGroup Object
"""
try:
existing_group = UserGroup.find_by_uuid(uuid)
input_dict = {**input_group_applications.dict()}
input_group_applications = input_dict.get("applications", [])
CollectionHandler.validate_documents("applications",
input_group_applications)
group_fields = existing_group.get_fields(reformat_datetime=True)
group_permissions = group_fields.get("permissions") if group_fields.get(
"permissions") else []
group_applications = group_fields.get("applications") if group_fields.get(
"applications") else []
added_applications = list(
set(input_group_applications) - set(group_applications))
permissions_to_add = []
if len(added_applications) > 0:
default_action_id = input_dict.get("action_id")
_ = Action.find_by_uuid(default_action_id)
for application in added_applications:
permissions_to_add = filter_and_update_permissions_of_applications(
application, uuid, "add", default_action_id)
group_permissions += permissions_to_add
group_applications.append(application)
removed_applications = list(
set(group_applications) - set(input_group_applications))
if len(removed_applications) > 0:
permissions_to_remove = []
for application in removed_applications:
permission_to_remove = filter_and_update_permissions_of_applications(
application, uuid, "remove")
permissions_to_remove += permission_to_remove
group_permissions = list(
set(group_permissions) - set(permissions_to_remove))
group_applications = list(
set(group_applications) - set(removed_applications))
setattr(existing_group, "permissions", group_permissions)
setattr(existing_group, "applications", group_applications)
existing_group.update()
group_fields = existing_group.get_fields(reformat_datetime=True)
return {
"success": True,
"message": "Successfully updated applications of a user group",
"data": group_fields
}
except ResourceNotFoundException as e:
Logger.error(e)
Logger.error(traceback.print_exc())
raise ResourceNotFound(str(e)) from e
except ValidationError as e:
Logger.error(e)
Logger.error(traceback.print_exc())
raise BadRequest(str(e)) from e
except Exception as e:
Logger.error(e)
Logger.error(traceback.print_exc())
raise InternalServerError(str(e)) from e