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