def get_all_manual_evaluation_submitted_assessments_for_learner()

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