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()
Пример #2
0
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")
Пример #4
0
 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")
Пример #5
0
 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("/")}))
Пример #6
0
    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()