in microservices/assessment_service/src/routes/submitted_assessment.py [0:0]
def get_all_manual_evaluation_submitted_assessments_for_learner(
req: Request,
learner_id: str,
le_id: str,
skip: int = Query(0, ge=0, le=2000),
limit: int = Query(10, ge=1, le=100)):
"""
This endpoint will fetch all the submitted_assessments of a learner for a
given unit from firestore, that can get feedback from the Assessor.
### Args:
- learner_id : uuid of learner
- le_id: uuid of learning_experience (unit)
- skip (int): Number of objects to be skipped. Default 0.
- limit (int): Size of array to be returned. Default 10.
### Raises:
- ResourceNotFoundException: If the learner_id or le_id does not exist
- Exception: 500 Internal Server Error if something went wrong
### Returns:
- SubmittedAssessmentResponseModel: SubmittedAssessment object
"""
try:
header = {"Authorization": req.headers.get("authorization")}
# Check to validate if Learner and learning_experience
# with given ID exists or not
Learner.find_by_uuid(learner_id)
LearningExperience.find_by_uuid(le_id)
assessor_map = {}
collection_manager = SubmittedAssessment.collection
collection_manager = collection_manager.filter(
"learner_id", "==", learner_id)
collection_manager = collection_manager.filter(
"is_autogradable", "==", False)
submitted_assessments = collection_manager.order("-created_time").offset(
skip).fetch(limit)
response = []
for submitted_assessment in submitted_assessments:
assessment_node = Assessment.find_by_uuid(
submitted_assessment.assessment_id)
try:
lo_node = traverse_up(assessment_node, "assessments",
"module")
le_node = traverse_up(lo_node, "learning_objects",
"learning_experience")
le_data = le_node.get_fields()
except Exception as e:
Logger.error(e)
Logger.error(traceback.print_exc())
Logger.info("Passing Empty Dict to Get Success Response")
le_data = {}
if le_id == le_data.get("uuid", ""):
try:
discipline_data = traverse_up(le_node, "learning_experiences",
"discipline").get_fields()
except Exception as e:
Logger.error(e)
Logger.error(traceback.print_exc())
Logger.info("Passing Empty Dict to Get Success Response")
discipline_data = {}
submitted_assessment_data = get_submitted_assessment_data(
submitted_assessment, False, None, assessment_node,
assessor_map)
submitted_assessment_data["unit_name"] = le_data.get("name", "")
submitted_assessment_data["discipline_name"] = discipline_data.get(
"name", "")
if discipline_data:
instructor_id = instructor_handler(header, discipline_data["uuid"])
instructor_data = User.find_by_user_id(instructor_id).get_fields()
submitted_assessment_data["instructor_id"] = instructor_data.get(
"user_id", "")
submitted_assessment_data["instructor_name"] = \
(instructor_data.get("first_name", "") + " " +
instructor_data.get("last_name", "")).lstrip()
else:
submitted_assessment_data["instructor_id"] = ""
submitted_assessment_data["instructor_name"] = "Unassigned"
found = False
for item in response:
if item.get("learning_object", "") == lo_node.uuid:
found = True
item["submitted_assessments"].append(submitted_assessment_data)
if not found:
response.append({
"learning_object": lo_node.uuid,
"learning_object_name": lo_node.name,
"submitted_assessments": [submitted_assessment_data]
})
count = 10000
final_response = {"records": response, "total_count": count}
return {
"success": True,
"message": "Successfully fetched the submitted assessments",
"data": final_response
}
except ResourceNotFoundException as e:
print(traceback.print_exc())
raise ResourceNotFound(str(e)) from e
except Exception as e:
print(traceback.print_exc())
raise InternalServerError(str(e)) from e