def remove_all_students(user): """ Removes all grades and all students for a user. (use with caution) """ all_grades = GradeEntry.query(ancestor=get_parent_key(user)) for grade in all_grades: grade.key.delete() all_students = Student.query(ancestor=get_parent_key(user)) for student in all_students: student.key.delete()
def get_grade_entries(user, assignments_map, students_map): """ Gets all of the grade entries for this user. Replaces the assignment_key and student_key with an assignment and student. """ grade_entries = GradeEntry.query(ancestor=get_parent_key(user)).fetch() for grade_entry in grade_entries: grade_entry.assignment = assignments_map[grade_entry.assignment_key] grade_entry.student = students_map[grade_entry.student_key] return grade_entries
def assignment_delete(self, assignment): """ Delete the assignment with the given key, plus all its associated grade entries""" if not assignment.from_datastore: raise endpoints.NotFoundException("No assignment with this key exists") children = GradeEntry.query(ancestor=assignment.key) for grade_entry in children: grade_entry.key.delete() assignment.key.delete() return Assignment(name="deleted")
def assignment_delete(self, an_assignment): """ Deletes an Assignment and all of its Grade Entries. """ if not an_assignment.from_datastore: raise endpoints.NotFoundException("No Assignment found for that id.") if endpoints.get_current_user().email().lower() != an_assignment.owner_email: raise endpoints.ForbiddenException("You can only delete your own assignments.") # Remove all of the entries for this assignment. queryForGradeEntries = GradeEntry.query().filter(GradeEntry.assignment_id == an_assignment.key.id()) for a_grade_entry in queryForGradeEntries: a_grade_entry.key.delete() # Remove the assignment an_assignment.key.delete() return Assignment(assignment_name="deleted")
def get(self): user = users.get_current_user() if not user: self.redirect(users.create_login_url(self.request.uri)) else: assignments_with_grades = []; assignment_query = Assignment.query().order(Assignment.assignment_name).filter(Assignment.owner_email == user.email().lower()) for an_assignment in assignment_query: grade_entry_query = GradeEntry.query().order(GradeEntry.student_name).filter(GradeEntry.owner_email == user.email().lower()).filter(GradeEntry.assignment_id == an_assignment.id) assignments_with_grades.append({'assignment_name': an_assignment.assignment_name, 'grade_entries': grade_entry_query}) self.response.out.write(template.render('templates/graderecorder.html', {'assignments_with_grades': assignments_with_grades, 'assignments': assignment_query, 'use_hardcoded_roster': True, 'user_email': user.email(), 'logout_link': users.create_logout_url("/")}))
def get(self): user = users.get_current_user() if not user: self.redirect(users.create_login_url(self.request.uri)) else: grades = []; assignment_query = Assignment.query().order(Assignment.assignment_name).filter(Assignment.owner == user) for an_assignment in assignment_query: assignment_dict = {'assignment_name': an_assignment.assignment_name} grade_entries = [] grade_entry_query = GradeEntry.query().order(GradeEntry.student_name).filter(GradeEntry.owner == user).filter(GradeEntry.assignment_id == an_assignment.id) for a_grade_entry in grade_entry_query: self.add_team_individuals(a_grade_entry, grade_entries) # grade_entries.append(a_grade_entry) assignment_dict['grade_entries'] = sorted(grade_entries, key=operator.attrgetter('student_name')) grades.append(assignment_dict) self.response.out.write(template.render('templates/graderecorder.html', {'grades': grades, 'assignments': assignment_query, 'use_hardcoded_roster': True, 'user_email': user.email(), 'logout_link': users.create_logout_url("/")}))
def get_csv_export_lists(user, export_student_name, export_rose_username, export_team, urlsafe_assignment_keys): table_data = [] student_row_index_map = {} # Map of student_key to row in the table_data assignment_col_index_map = {} # Map of assignment_key to column in the table_data header_row = [] table_data.append(header_row) num_columns = 0 # Student Header if export_student_name: header_row.append("First") header_row.append("Last") num_columns += 2 if export_rose_username: header_row.append("Username") num_columns += 1 if export_team: header_row.append("Team") num_columns += 1 # Assignment Prep assignment_keys = [] for urlsafe_assignment_key in urlsafe_assignment_keys: assignment_keys.append(ndb.Key(urlsafe=urlsafe_assignment_key)) assignments = ndb.get_multi(assignment_keys) assignments.sort(key=lambda assignment: assignment.name) num_assignments_found = 0 for assignment in assignments: if assignment: header_row.append(assignment.name) assignment_col_index_map[assignment.key] = num_columns num_columns += 1 num_assignments_found += 1 # Student Data + assignment placeholders num_rows = 1 students = Student.query(ancestor=get_parent_key(user)).order(Student.rose_username) for student in students: current_row = [] if export_student_name: current_row.append(student.first_name) current_row.append(student.last_name) if export_rose_username: current_row.append(student.rose_username) if export_team: current_row.append(student.team) for i in range(num_assignments_found): current_row.append("-") table_data.append(current_row) student_row_index_map[student.key] = num_rows num_rows += 1 # Add the grades grade_query = GradeEntry.query(ancestor=get_parent_key(user)) for grade in grade_query: if grade.student_key in student_row_index_map and grade.assignment_key in assignment_col_index_map: row = student_row_index_map[grade.student_key] col = assignment_col_index_map[grade.assignment_key] table_data[row][col] = grade.score # Removing rows with no grades (allows for data merging) for row_index in reversed(range(1, num_rows)): row = table_data[row_index] blank_grades = row.count("-") if blank_grades == num_assignments_found: table_data.remove(row) return table_data
def remove_all_grades_for_assignment(user, assignment_key): """ Removes all grades for the given student. """ grades_for_assignment = GradeEntry.query(ancestor=assignment_key) for grade in grades_for_assignment: grade.key.delete()
def remove_all_grades_for_student(user, student_key): """ Removes all grades for the given student. """ grades_for_student = GradeEntry.query(GradeEntry.student_key==student_key, ancestor=get_parent_key(user)) for grade in grades_for_student: grade.key.delete()