def test_get_team_submission_from_individual_submission_exception(self): """ Test that calling team_api.get_team_submission when there is no matching TeamSubmission will raise a TeamSubmissionNotFoundError """ with self.assertRaises(TeamSubmissionNotFoundError): team_api.get_team_submission_from_individual_submission('aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee')
def get_team_submission_uuid_from_individual_submission_uuid( self, individual_submission_uuid): """ Given an individual submission uuid, return the uuid of the related team submission """ team_submission = get_team_submission_from_individual_submission( individual_submission_uuid) return team_submission['team_submission_uuid']
def test_get_team_submission_from_individual_submission(self): """ Test that calling team_api.get_team_submission_from_individual_submission returns the expected team submission """ team_submission_model = self._make_team_submission(create_submissions=True) regular_submission_uuid = team_submission_model.submissions.first().uuid team_submission_dict = team_api.get_team_submission_from_individual_submission(regular_submission_uuid) self.assertDictEqual( team_submission_dict, TeamSubmissionSerializer(team_submission_model).data )
def do_team_staff_assessment(self, data, team_submission_uuid=None): """ Teams version of do_staff_assessment. Providing the team_submission_uuid removes lookup of team submission from individual submission_uuid. """ if 'submission_uuid' not in data and team_submission_uuid is None: return False, self._( "The submission ID of the submission being assessed was not found." ) try: if not team_submission_uuid: team_submission = team_sub_api.get_team_submission_from_individual_submission( data['submission_uuid']) team_submission_uuid = team_submission['team_submission_uuid'] assessment = teams_api.create_assessment( team_submission_uuid, self.get_student_item_dict()["student_id"], data['options_selected'], clean_criterion_feedback(self.rubric_criteria, data['criterion_feedback']), data['overall_feedback'], create_rubric_dict(self.prompts, self.rubric_criteria_with_labels)) assess_type = data.get('assess_type', 'regrade') self.publish_assessment_event("openassessmentblock.staff_assess", assessment[0], type=assess_type) team_workflow_api.update_from_assessments( team_submission_uuid, override_submitter_requirements=(assess_type == 'regrade')) except StaffAssessmentRequestError: logger.warning( "An error occurred while submitting a team assessment " "for the submission %s", data['submission_uuid'], exc_info=True) msg = self._("Your team assessment could not be submitted.") return False, msg except StaffAssessmentInternalError: logger.exception( "An error occurred while submitting a team assessment " "for the submission %s", data['submission_uuid'], ) msg = self._("Your team assessment could not be submitted.") return False, msg return True, ''
def _team_assess(self, data): """ Encapsulates the functionality around staff assessment for a team based assignment """ try: team_submission = team_sub_api.get_team_submission_from_individual_submission( data['submission_uuid']) team_submission_uuid = team_submission['team_submission_uuid'] assessment = teams_api.create_assessment( team_submission_uuid, self.get_student_item_dict()["student_id"], data['options_selected'], clean_criterion_feedback(self.rubric_criteria, data['criterion_feedback']), data['overall_feedback'], create_rubric_dict(self.prompts, self.rubric_criteria_with_labels)) assess_type = data.get('assess_type', 'regrade') self.publish_assessment_event("openassessmentblock.staff_assess", assessment[0], type=assess_type) team_workflow_api.update_from_assessments( team_submission_uuid, override_submitter_requirements=(assess_type == 'regrade')) except StaffAssessmentRequestError: logger.warning( "An error occurred while submitting a team assessment " "for the submission %s", data['submission_uuid'], exc_info=True) msg = self._("Your team assessment could not be submitted.") return {'success': False, 'msg': msg} except StaffAssessmentInternalError: logger.exception( "An error occurred while submitting a team assessment " "for the submission %s", data['submission_uuid'], ) msg = self._("Your team assessment could not be submitted.") return {'success': False, 'msg': msg} return {'success': True, 'msg': ""}
def add_team_submission_context(self, context, team_submission_uuid=None, individual_submission_uuid=None, transform_usernames=False): """ Adds team submission information to context dictionary, based on existing team submissions Specifically team name and team_usernames Params: - context (dict): a context dict for rendering a page that we will add values to - team_submission_uuid (string): [optional] the uuid of the team submission we want to add context info for - individual_submission_uuid (string): [optional] the uuid of an individual submission that's a part of the team submission for which we want to add context info - transform_usernames (bool): [optional default: False] If False, context['team_usernames'] will be a list of username strings. If True, it will be a string, in the form "Username1, Username2, ... UsernameN, and UsernameN+1" One of team_submission_uuid and individual_submission_uuid are required, and if they are both provided, individual_submission_uuid will be ignored. """ if not any((team_submission_uuid, individual_submission_uuid)): raise TypeError( "One of team_submission_uuid or individual_submission_uuid must be provided" ) if team_submission_uuid: team_submission = get_team_submission(team_submission_uuid) elif individual_submission_uuid: team_submission = get_team_submission_from_individual_submission( individual_submission_uuid) team = self.teams_service.get_team_by_team_id( team_submission['team_id']) context['team_name'] = team.name student_ids = get_team_submission_student_ids( team_submission['team_submission_uuid']) usernames = [ self.get_username(student_id) for student_id in student_ids ] if transform_usernames: usernames = list_to_conversational_format(usernames) context['team_usernames'] = usernames