def post(self, data, check, mutator):
        """Handles the POST request when creating a Grading Group"""
        student_survey = None
        grading_survey = None
        survey_type = None

        if 'midterm' in data.POST:
            student_survey = survey.getMidtermProjectSurveyForProgram(
                data.program)
            grading_survey = survey.getMidtermGradingProjectSurveyForProgram(
                data.program)
            survey_type = 'Midterm'
        elif 'final' in data.POST:
            student_survey = survey.getFinalProjectSurveyForProgram(
                data.program)
            grading_survey = survey.getFinalGradingProjectSurveyForProgram(
                data.program)
            survey_type = 'Final'
        else:
            raise exception.BadRequest('No valid evaluation type present')

        if not student_survey or not grading_survey:
            data.redirect.program()
            return data.redirect.to('gsoc_grading_group', extra=['err=1'])

        q = GSoCGradingSurveyGroup.all()
        q.filter('student_survey', student_survey)
        q.filter('grading_survey', grading_survey)

        existing_group = q.get()

        if existing_group:
            data.redirect.id(existing_group.key().id())
        else:
            props = {
                'name':
                '%s - %s Evaluation' % (data.program.name, survey_type),
                'program': data.program,
                'grading_survey': grading_survey,
                'student_survey': student_survey,
            }
            new_group = GSoCGradingSurveyGroup(**props)
            new_group.put()
            data.redirect.id(new_group.key().id())

        return data.redirect.to('gsoc_grading_record_overview')
    def createSurveys(self):
        """Creates the surveys and records required for the tests.
    """
        survey_values = {
            'author': self.founder,
            'title': 'Title',
            'modified_by': self.founder,
            'link_id': 'link_id',
            'scope': self.gsoc,
            'scope_path': self.gsoc.key().id_or_name()
        }

        self.project_survey = ProjectSurvey(key_name='key_name',
                                            **survey_values)
        self.project_survey.put()

        self.grading_survey = GradingProjectSurvey(key_name='key_name',
                                                   **survey_values)
        self.grading_survey.put()

        record_values = {
            'user': self.student.user,
            'org': self.org,
            'project': self.project,
            'survey': self.project_survey
        }
        self.project_survey_record = GSoCProjectSurveyRecord(**record_values)
        self.project_survey_record.put()

        self.grading_survey = GradingProjectSurvey(**survey_values)
        self.grading_survey.put()

        record_values = {
            'user': self.student.user,
            'org': self.org,
            'project': self.project,
            'survey': self.grading_survey,
            'grade': True
        }
        self.grading_survey_record = GSoCGradingProjectSurveyRecord(
            **record_values)
        self.grading_survey_record.put()

        group_values = {
            'name': 'Survey Group Name',
            'grading_survey': self.grading_survey,
            'student_survey': self.project_survey,
            'program': self.gsoc
        }
        self.survey_group = GSoCGradingSurveyGroup(**group_values)
        self.survey_group.put()

        record_values = {
            'grading_survey_group': self.survey_group,
            'mentor_record': self.grading_survey_record,
            'student_record': self.project_survey_record,
            'grade_decision': 'pass'
        }
        self.grading_record = GSoCGradingRecord(parent=self.project,
                                                **record_values)
        self.grading_record.put()