in microservices/lti/src/routes/nrps.py [0:0]
def get_context_members(context_id: str, token: auth_scheme = Depends()):
"""The get context members endpoint will return the list of members data
with their roles within a given context
### Args:
context_id: `str`
Unique identifier for context
### Raises:
ResourceNotFoundException:
If the context does not exist. <br/>
Exception:
Internal Server Error. Raised if something went wrong
### Returns:
LineItem: `LineItemResponseModel`
"""
try:
nrps_id = f"{LTI_ISSUER_DOMAIN}/lti/api/v1/{context_id}/memberships"
get_context_url = f"http://classroom-shim/classroom-shim/api/v1/contexts/{context_id}"
context_res = requests.get(
url=get_context_url,
headers={"Authorization": f"Bearer {auth_client.get_id_token()}"},
timeout=60)
if context_res.status_code == 200:
context_data = context_res.json().get("data")
else:
Logger.error(
f"Error 1210: Internal error from Shim service get context API with \
Status code: {context_res.status_code}; Response: {context_res.text}"
)
raise Exception("Request failed with error code 1210")
context_details = {
"id": context_data.get("id"),
"label": context_data.get("description"),
"title": context_data.get("name")
}
context_type = context_data.get("context_type")
members_list = []
members_data = []
get_members_url = f"http://classroom-shim/classroom-shim/api/v1/contexts/{context_id}/members?context_type={context_type}"
members_res = requests.get(
url=get_members_url,
headers={"Authorization": f"Bearer {auth_client.get_id_token()}"},
timeout=60)
if members_res.status_code == 200:
members_data = members_res.json().get("data")
else:
Logger.error(
f"Error 1220: Internal error from Shim service get members API with \
Status code: {members_res.status_code}; Response: {members_res.text}"
)
raise Exception("Request failed with error code 1220")
for member in members_data:
if member.get("user_type") == "learner" and member.get(
"enrollment_status", "") == "invited":
pass
else:
member_name = member.get("first_name", "") + " " + member.get(
"last_name", "")
if member.get("enrollment_status"):
member_status = member.get("enrollment_status").capitalize()
else:
member_status = "Active"
members_info = {
"user_id": member.get("user_id"),
"status": member_status,
"given_name": member.get("first_name"),
"family_name": member.get("last_name"),
"name": member_name,
"email": member.get("email"),
"picture": member.get("photo_url"),
"lis_person_sourcedid": member.get("user_id")
}
if member.get("user_type") == "learner":
members_info["roles"] = [
"http://purl.imsglobal.org/vocab/lis/v2/membership#Learner",
"http://purl.imsglobal.org/vocab/lis/v2/institution/person#Learner",
"http://purl.imsglobal.org/vocab/lis/v2/institution/person#Student"
]
elif member.get("user_type") == "faculty":
members_info["roles"] = [
"http://purl.imsglobal.org/vocab/lis/v2/membership#Instructor",
"http://purl.imsglobal.org/vocab/lis/v2/institution/person#Faculty",
"http://purl.imsglobal.org/vocab/lis/v2/institution/person#Instructor"
]
elif member.get("user_type") == "admin":
members_info["roles"] = [
"http://purl.imsglobal.org/vocab/lis/v2/membership#Administrator",
"http://purl.imsglobal.org/vocab/lis/v2/system/person#Administrator",
"http://purl.imsglobal.org/vocab/lis/v2/institution/person#Administrator"
]
members_list.append(members_info)
output_data = {
"id": nrps_id,
"context": context_details,
"members": members_list
}
return output_data
except InvalidTokenError as e:
Logger.error(e)
raise Unauthenticated(str(e)) from e
except ResourceNotFoundException as e:
Logger.error(e)
raise ResourceNotFound(str(e)) from e
except Exception as e:
Logger.error(e)
Logger.error(traceback.print_exc())
raise InternalServerError(str(e)) from e