def update_inspace_user_field()

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


def update_inspace_user_field(skip: Optional[int] = 0,
                              limit: Optional[int] = 100):
  """
  Update Inspace User Field Value
  """
  try:
    if not is_inspace_enabled():
      raise ValidationError("you don't have permission to access this endpoint")
    # ids for which inspace user was created
    created_inspace_users = []
    # ids for which inspace user creation failed
    failed_user_ids = []
    # fields where inspace mapping was set as True
    inspace_users = []
    # fields where inspace mapping was set as False
    non_inspace_users = []
    # users for which inspace user already exists
    already_created_inspace_users = []
    # users whose document was not modified
    non_modified_users = []
    response_message = ""
    allowed_inspace_user_types = ["learner"]
    allowed_inspace_user_types.extend(STAFF_USERS)

    users = User.collection.order("-created_time").filter(
      "is_deleted", "==", False).offset(skip).fetch(limit)

    for user in users:
      if user.inspace_user is None:
        if user.user_type in allowed_inspace_user_types:
          user.inspace_user = {"is_inspace_user": True, "inspace_user_id": ""}
          user.update()
          inspace_users.append(user.user_id)
        else:
          user.inspace_user = {"is_inspace_user": False, "inspace_user_id": ""}
          user.update()
          non_inspace_users.append(user.user_id)

    users = User.collection.order("-created_time").filter(
      "is_deleted", "==", False).offset(skip).fetch(limit)

    for user in users:
      if user.user_type in allowed_inspace_user_types:
        try:
          if user.inspace_user.get("is_inspace_user") is False:
            non_modified_users.append(user.user_id)

          elif (user.inspace_user.get("is_inspace_user") is True
                and user.inspace_user.get("inspace_user_id") == ""):
            # ---- Inspace User creation ----
            response_message = create_inspace_user_helper(user)
            if response_message:
              Logger.info(f"Inspace User Created for {user.user_id}")
              created_inspace_users.append(user.user_id)

          else:
            already_created_inspace_users.append(user.user_id)

        except Exception as e:
          Logger.error(e)
          Logger.error(traceback.print_exc())
          failed_user_ids.append(user.user_id)

      else:
        non_modified_users.append(user.user_id)

    return {
        "success": True,
        "message": response_message,
        "data": {
            "created_inspace_users": created_inspace_users,
            "failed_inspace_user_creation": failed_user_ids,
            "inspace_users_true": inspace_users,
            "inspace_users_false": non_inspace_users,
            "non_modified_users": non_modified_users,
            "already_created_inspace_users": already_created_inspace_users
        }
    }
  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