in components/user_management/src/routes/user.py [0:0]
def create_inspace_user_account(user_id: str):
"""The create inspace user endpoint will create an Inspace user for an
already existing GPCore user.
### Args:
user_id (str): User id of the GPCore user for which Inspace User
is to be created
### Raises:
Exception: 500 Internal Server Error if something went wrong
### Returns:
PostUserResponseModel: User Object
"""
try:
if not is_inspace_enabled():
raise ValidationError("you don't have permission to access this endpoint")
user = User.find_by_user_id(user_id)
allowed_inspace_user_types = ["learner"]
allowed_inspace_user_types.extend(STAFF_USERS)
if user.user_type not in allowed_inspace_user_types:
inspace_mapping = {
"is_inspace_user": False,
"inspace_user_id": ""
}
user.inspace_user = inspace_mapping
user.update()
raise ValidationError("Cannot create Inspace user for user"
f" of type {user.user_type}")
if (user.inspace_user is None or
user.inspace_user.get("is_inspace_user") is False):
inspace_mapping = {
"is_inspace_user": True,
"inspace_user_id": ""
}
user.inspace_user = inspace_mapping
user.update()
elif (user.inspace_user.get("is_inspace_user") is True and
user.inspace_user.get("inspace_user_id") != ""):
raise ConflictError("Inspace User already exists for current user")
# ---- Try fetching Inspace User
response_message = None
status_code, inspace_user_res = get_inspace_user_helper(user)
response_message = ""
if status_code == 200:
inspace_mapping = {
"is_inspace_user": True,
"inspace_user_id": inspace_user_res["inspaceUser"]["id"]
}
user.inspace_user = inspace_mapping
user.update()
response_message = "Successfully updated Inspace User id for current user"
elif status_code == 404:
# ---- Inspace User creation if user doesn't exist----
if create_inspace_user_helper(user):
response_message = "Successfully created Inspace User for current user"
else:
response_message = "Cannot create Inspace User for current User"
# fetch and return updated user
user = User.find_by_user_id(user_id)
user_fields = user.get_fields(reformat_datetime=True)
return {
"success": True,
"message": response_message,
"data": user_fields
}
except ResourceNotFoundException as e:
Logger.error(e)
Logger.error(traceback.print_exc())
raise ResourceNotFound(str(e)) from e
except ConflictError as e:
Logger.error(e)
Logger.error(traceback.print_exc())
raise Conflict(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