def _create_student_and_submission(student, answer, date=None): new_student_item = STUDENT_ITEM.copy() new_student_item["student_id"] = student submission = sub_api.create_submission(new_student_item, answer, date) peer_api.create_peer_workflow(submission["uuid"]) workflow_api.create_workflow(submission["uuid"]) return submission, new_student_item
def test_error_on_assessment_creation(self, mock_filter): mock_filter.side_effect = DatabaseError("Bad things happened") submission = sub_api.create_submission(STUDENT_ITEM, ANSWER_ONE) peer_api.create_peer_workflow(submission["uuid"]) peer_api.create_assessment( submission["uuid"], STUDENT_ITEM["student_id"], ASSESSMENT_DICT, RUBRIC_DICT, REQUIRED_GRADED_BY, MONDAY, )
def create_workflow(submission_uuid): """Begins a new assessment workflow. Create a new workflow that other assessments will record themselves against. Args: submission_uuid (str): The UUID for the submission that all our assessments will be evaluating. Returns: dict: Assessment workflow information with the following `uuid` = UUID of this `AssessmentWorkflow` `submission_uuid` = UUID of submission this workflow tracks `status` = Active step, always "peer" when created. `created` = created datetime 'modified' = modified datetime (same as `created` for this method) 'score' = should be None in the usual case, but could be a dict with keys "points_earned" and "points_possible` and int values. The latter will only happen on workflow creation if something else has already written the score for this submission (such as a professor manually entering it). There is no support for such a feature at present, but it may be added later. Raises: AssessmentWorkflowRequestError: If the `submission_uuid` passed in does not exist or is of an invalid type. AssessmentWorkflowInternalError: Unexpected internal error, such as the submissions app not being available or a database configuation problem. """ def sub_err_msg(specific_err_msg): return ( u"Could not create assessment workflow: " u"retrieving submission {} failed: {}" .format(submission_uuid, specific_err_msg) ) try: submission_dict = sub_api.get_submission_and_student(submission_uuid) except sub_api.SubmissionNotFoundError as err: err_msg = sub_err_msg("submission not found") logger.error(err_msg) raise AssessmentWorkflowRequestError(err_msg) except sub_api.SubmissionRequestError as err: err_msg = sub_err_msg(err) logger.error(err_msg) raise AssessmentWorkflowRequestError(err_msg) except sub_api.SubmissionInternalError as err: err_msg = sub_err_msg(err) logger.error(err) raise AssessmentWorkflowInternalError( u"retrieving submission {} failed with unknown error: {}" .format(submission_uuid, err) ) # We're not using a serializer to deserialize this because the only variable # we're getting from the outside is the submission_uuid, which is already # validated by this point. try: peer_api.create_peer_workflow(submission_uuid) workflow = AssessmentWorkflow.objects.create( submission_uuid=submission_uuid, status=AssessmentWorkflow.STATUS.peer, course_id=submission_dict['student_item']['course_id'], item_id=submission_dict['student_item']['item_id'], ) except ( DatabaseError, peer_api.PeerAssessmentError, sub_api.SubmissionError ) as err: err_msg = u"Could not create assessment workflow: {}".format(err) logger.exception(err_msg) raise AssessmentWorkflowInternalError(err_msg) return AssessmentWorkflowSerializer(workflow).data