def update_permissions_of_user_group()

in components/user_management/src/routes/user_group.py [0:0]


def update_permissions_of_user_group(
    uuid: str, application_uuid: str,
    input_application_permissions: UpdateUserGroupPermissions):
  """Assign/unassign permissions related to an application
      of user group with the uuid passed in the request body

  ### Args:
      input_application_permissions (UpdateUserGroupPermissions): Dict
      containing updated permissions of the application

  ### Raises:
      ResourceNotFoundException: If the user group does not exist
      Exception: 500 Internal Server Error if something went wrong

  ### Returns:
      UpdatePermissionsOfGroupResponseModel: UserGroup Object
  """
  try:
    existing_group = UserGroup.find_by_uuid(uuid)
    input_dict = {**input_application_permissions.dict()}
    input_permissions = input_dict.get("permission_ids")

    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 []

    if not application_uuid in group_applications:
      raise ValidationError(
          "UserGroup doesn't have access to the given application")

    CollectionHandler.get_document_from_collection("applications",
                                                   application_uuid)

    added_permissions = list(set(input_permissions) - set(group_permissions))
    permissions_to_add = []
    if len(added_permissions) > 0:
      for permission in added_permissions:
        permissions_to_add.append(
            validate_permission_with_application(permission, application_uuid))

      for permission in permissions_to_add:
        update_permissions_with_user_group(permission, uuid, "add")

      group_permissions += added_permissions

    removed_permissions = list(set(group_permissions) - set(input_permissions))
    removed_permissions_of_application = []
    permissions_to_remove = []
    if len(removed_permissions) > 0:
      for permission in removed_permissions:
        permission = validate_permission_with_application(
            permission, application_uuid, False)
        if permission:
          permissions_to_remove.append(permission)
      for permission in permissions_to_remove:
        update_permissions_with_user_group(permission, uuid, "remove")
        removed_permissions_of_application.append(permission.uuid)
      group_permissions = list(
          set(group_permissions) - set(removed_permissions_of_application))

    setattr(existing_group, "permissions", group_permissions)
    existing_group.update()
    group_fields = existing_group.get_fields(reformat_datetime=True)
    return {
        "success": True,
        "message": "Successfully updated permissions for " +
                   "the applcation 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