Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def get(self, submission_id):
try:
submission = self.gradebook.find_submission_notebook_by_id(submission_id)
assignment_id = submission.assignment.assignment.name
notebook_id = submission.notebook.name
student_id = submission.student.id
except MissingEntry:
raise web.HTTPError(404, "Invalid submission: {}".format(submission_id))
# redirect if there isn't a trailing slash in the uri
if os.path.split(self.request.path)[1] == submission_id:
url = self.request.path + '/'
if self.request.query:
url += '?' + self.request.query
return self.redirect(url, permanent=True)
filename = os.path.join(os.path.abspath(self.coursedir.format_path(
self.coursedir.autograded_directory, student_id, assignment_id)), '{}.ipynb'.format(notebook_id))
relative_path = os.path.relpath(filename, self.coursedir.root)
indices = self.api.get_notebook_submission_indices(assignment_id, notebook_id)
ix = indices.get(submission.id, -2)
resources = {
notebook : string
the name of the notebook
assignment : string
the name of the assignment
`**kwargs`
additional keyword arguments for :class:`~nbgrader.api.SourceCell`
Returns
-------
source_cell : :class:`~nbgrader.api.SourceCell`
"""
try:
source_cell = self.find_source_cell(name, notebook, assignment)
except MissingEntry:
source_cell = self.add_source_cell(name, notebook, assignment, **kwargs)
else:
for attr in kwargs:
setattr(source_cell, attr, kwargs[attr])
try:
self.db.commit()
except (IntegrityError, FlushError) as e:
raise InvalidEntry(*e.args)
return source_cell
----------
name : string
the unique name of the assignment
Returns
-------
assignment : :class:`~nbgrader.api.Assignment`
"""
try:
assignment = self.db.query(Assignment)\
.filter(Assignment.name == name)\
.one()
except NoResultFound:
raise MissingEntry("No such assignment: {}".format(name))
return assignment
def start(self):
super(DbStudentRemoveApp, self).start()
if len(self.extra_args) != 1:
self.fail("No student id provided.")
student_id = self.extra_args[0]
with Gradebook(self.coursedir.db_url) as gb:
try:
student = gb.find_student(student_id)
except MissingEntry:
self.fail("No such student: '%s'", student_id)
if len(student.submissions) > 0:
if self.force:
self.log.warning("Removing associated grades")
else:
self.log.warning("!!! There are grades in the database for student '%s'.", student_id)
self.log.warning("!!! Removing this student will also remove these grades.")
self.fail("!!! If you are SURE this is what you want to do, rerun with --force.")
self.log.info("Removing student with ID '%s'", student_id)
gb.remove_student(student_id)
----------
student_id : string
The unique id of the student
Returns
-------
student : :class:`~nbgrader.api.Student`
"""
try:
student = self.db.query(Student)\
.filter(Student.id == student_id)\
.one()
except NoResultFound:
raise MissingEntry("No such student: {}".format(student_id))
return student
try:
comment = self.db.query(Comment)\
.join(SolutionCell, SolutionCell.id == Comment.cell_id)\
.join(SubmittedNotebook, SubmittedNotebook.id == Comment.notebook_id)\
.join(Notebook, Notebook.id == SubmittedNotebook.notebook_id)\
.join(SubmittedAssignment, SubmittedAssignment.id == SubmittedNotebook.assignment_id)\
.join(Assignment, Assignment.id == SubmittedAssignment.assignment_id)\
.join(Student, Student.id == SubmittedAssignment.student_id)\
.filter(
SolutionCell.name == solution_cell,
Notebook.name == notebook,
Assignment.name == assignment,
Student.id == student)\
.one()
except NoResultFound:
raise MissingEntry("No such comment: {}/{}/{} for {}".format(
assignment, notebook, solution_cell, student))
return comment
try:
grade = self.db.query(Grade)\
.join(GradeCell, GradeCell.id == Grade.cell_id)\
.join(SubmittedNotebook, SubmittedNotebook.id == Grade.notebook_id)\
.join(Notebook, Notebook.id == SubmittedNotebook.notebook_id)\
.join(SubmittedAssignment, SubmittedAssignment.id == SubmittedNotebook.assignment_id)\
.join(Assignment, Assignment.id == SubmittedAssignment.assignment_id)\
.join(Student, Student.id == SubmittedAssignment.student_id)\
.filter(
GradeCell.name == grade_cell,
Notebook.name == notebook,
Assignment.name == assignment,
Student.id == student)\
.one()
except NoResultFound:
raise MissingEntry("No such grade: {}/{}/{} for {}".format(
assignment, notebook, grade_cell, student))
return grade
# Loop over each student in the database
for student in gb.students:
# Create a dictionary that will store information about this student's
# submitted assignment
score = {}
score['max_score'] = assignment.max_score
score['student'] = student.id
score['assignment'] = assignment.name
# Try to find the submission in the database. If it doesn't exist, the
# `MissingEntry` exception will be raised, which means the student
# didn't submit anything, so we assign them a score of zero.
try:
submission = gb.find_submission(assignment.name, student.id)
except MissingEntry:
score['score'] = 0.0
else:
score['score'] = submission.score
grades.append(score)
# Create a pandas dataframe with our grade information, and save it to disk
grades = pd.DataFrame(grades).set_index(['student', 'assignment']).sortlevel()
grades.to_csv('grades.csv')
# Print out what the grades look like
with open('grades.csv', 'r') as fh:
print(fh.read())
def _create_source_cell(self, cell):
grade_id = cell.metadata.nbgrader['grade_id']
try:
source_cell = self.gradebook.find_source_cell(grade_id, self.notebook_id, self.assignment_id).to_dict()
del source_cell['name']
del source_cell['notebook']
del source_cell['assignment']
except MissingEntry:
source_cell = {}
source_cell.update({
'cell_type': cell.cell_type,
'locked': utils.is_locked(cell),
'source': cell.source,
'checksum': cell.metadata.nbgrader.get('checksum', None)
})
self.new_source_cells[grade_id] = source_cell