Example #1
0
def updateOrCreateRecordsFor(survey_group, projects):
    """Updates or creates GradingRecords in batch.

  Args:
    survey_group: GradingSurveyGroup entity
    projects: list of GSoCProjects which to process

  Returns:
    The list of updated and new records.
  """
    records = []

    for project in projects:
        q = GSoCGradingRecord.all()
        q.filter('grading_survey_group', survey_group)
        q.ancestor(project)

        # try to retrieve an existing record
        record = q.get()

        # retrieve the fields that should be set
        record_fields = getFieldsForGradingRecord(project, survey_group,
                                                  record)

        if not record and project.status in ['failed', 'invalid'] \
            and not record_fields['mentor_record'] \
            and not record_fields['student_record']:
            # Don't create a new GradingRecord for an already failed project which
            # has no records attached. Because it does not matter.
            continue

        if record:
            # update existing GradingRecord
            for key, value in record_fields.iteritems():
                setattr(record, key, value)
        else:
            # create a new GradingRecord
            record = GSoCGradingRecord(parent=project, **record_fields)

        # prepare the new/updated record for storage
        records.append(record)

    db.put(records)

    return records
    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()