def updateSurveyRecord(self, user, survey, survey_record, fields): """ Create a new survey record, or get an existing one. params: user = user taking survey survey = survey entity survey_record = existing record, if one exists fields = submitted responses to survey fields """ if survey_record: create = False for prop in survey_record.dynamic_properties(): delattr(survey_record, prop) else: create = True survey_record = SurveyRecord(user=user, survey=survey) schema = eval(survey.survey_content.schema) for name, value in fields.items(): if name == 'project': project = student_project.StudentProject.get(value) survey_record.project = project elif name == 'grade': survey_record.grade = GRADES[value] else: pick_multi = name in schema and schema[name]['type'] == 'pick_multi' if pick_multi and hasattr(fields, 'getlist'): # it's a multidict setattr(survey_record, name, ','.join(fields.getlist(name))) else: setattr(survey_record, name, value) # if creating evaluation record, set SurveyRecordGroup db.put(survey_record) if 'evaluation' in survey.taking_access and create: if not project: return False role = self.getUserRole(user, survey, project) survey_record_group = self.setSurveyRecordGroup(survey, survey_record, project) if survey_record_group: db.put(survey_record_group) return survey_record