Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
manually grade written solutions anyway. This function adds
score information to the database if it doesn't exist. It does
NOT override the 'score' field, as this is the manual score
that might have been provided by a grader.
"""
# these are the fields by which we will identify the score
# information
grade = self.gradebook.find_grade(
cell.metadata['nbgrader']['grade_id'],
self.notebook_id,
self.assignment_id,
self.student_id)
# determine what the grade is
auto_score, _ = utils.determine_grade(cell, self.log)
grade.auto_score = auto_score
# if there was previously a manual grade, or if there is no autograder
# score, then we should mark this as needing review
if (grade.manual_score is not None) or (grade.auto_score is None):
grade.needs_manual_grade = True
else:
grade.needs_manual_grade = False
self.gradebook.db.commit()
def _add_comment(self, cell: NotebookNode, resources: ResourcesDict) -> None:
comment = self.gradebook.find_comment(
cell.metadata['nbgrader']['grade_id'],
self.notebook_id,
self.assignment_id,
self.student_id)
if cell.metadata.nbgrader.get("checksum", None) == utils.compute_checksum(cell) and not utils.is_task(cell):
comment.auto_comment = "No response."
else:
comment.auto_comment = None
self.gradebook.db.commit()
def __init__(self, *args, **kwargs):
super(RenderSolutions, self).__init__(*args, **kwargs)
self.env = utils.make_jinja_environment()
self.log.warning("Cell '{}' does not exist in the database".format(grade_id))
del cell.metadata.nbgrader['grade_id']
return cell, resources
# check that the cell type hasn't changed
if cell.cell_type != source_cell.cell_type:
self.report_change(grade_id, "cell_type", source_cell.cell_type, cell.cell_type)
self.update_cell_type(cell, source_cell.cell_type)
# check that the locked status hasn't changed
if utils.is_locked(cell) != source_cell.locked:
self.report_change(grade_id, "locked", source_cell.locked, utils.is_locked(cell))
cell.metadata.nbgrader["locked"] = source_cell.locked
# if it's a grade cell, check that the max score hasn't changed
if utils.is_grade(cell):
grade_cell = self.gradebook.find_grade_cell(
grade_id,
self.notebook_id,
self.assignment_id)
old_points = float(grade_cell.max_score)
new_points = float(cell.metadata.nbgrader["points"])
if old_points != new_points:
self.report_change(grade_id, "points", old_points, new_points)
cell.metadata.nbgrader["points"] = old_points
# always update the checksum, just in case
cell.metadata.nbgrader["checksum"] = source_cell.checksum
# if it's locked, check that the checksum hasn't changed
if source_cell.locked:
basename = os.path.basename(filename)
dirname = os.path.dirname(filename)
with utils.chdir(dirname):
nb = read_nb(basename, as_version=current_nbformat)
type_changed = self._get_type_changed_cells(nb)
if len(type_changed) > 0:
results = {}
results['type_changed'] = [{
"source": cell.source.strip(),
"old_type": cell.cell_type,
"new_type": cell.metadata.nbgrader.cell_type
} for cell in type_changed]
return results
with utils.chdir(dirname):
nb = self._preprocess(nb)
changed = self._get_changed_cells(nb)
passed = self._get_passed_cells(nb)
failed = self._get_failed_cells(nb)
results = {}
if not self.ignore_checksums and len(changed) > 0:
results['changed'] = [{
"source": cell.source.strip()
} for cell in changed]
elif self.invert:
if len(passed) > 0:
results['passed'] = [{
"source": cell.source.strip()
def _match_tests(self, cells):
"""Determine which tests correspond to which problems."""
tests = {}
rubric = {}
last_problem = None
last_problem_id = None
for cell in cells:
cell_type = utils.get_assignment_cell_type(cell)
# if it's a grading cell, then it becomes the most recent
# problem (to assign the autograding tests to)
if cell_type == "grade":
last_problem = cell
last_problem_id = last_problem.metadata['nbgrader']['id']
if last_problem_id in rubric:
raise RuntimeError(
"problem '{}' already exists!".format(
last_problem_id))
# extract the point value
points = last_problem.metadata['nbgrader']['points']
if points == '':
points = 0