def init_assignment(self, assignment_id, student_id): super(AutogradeApp, self).init_assignment(assignment_id, student_id) # try to get the student from the database, and throw an error if it # doesn't exist gb = Gradebook(self.db_url) try: gb.find_student(student_id) except MissingEntry: if self.create_student: self.log.warning("Creating student with ID '%s'", student_id) gb.add_student(student_id) else: self.fail("No student with ID '%s' exists in the database", student_id) # try to read in a timestamp from file src_path = self._format_source(assignment_id, student_id) timestamp = self._get_existing_timestamp(src_path) if timestamp: submission = gb.update_or_create_submission( assignment_id, student_id, timestamp=timestamp) self.log.info("%s submitted at %s", submission, timestamp) # if the submission is late, print out how many seconds late it is if timestamp and submission.total_seconds_late > 0: self.log.warning("%s is %s seconds late", submission, submission.total_seconds_late) else: submission = gb.update_or_create_submission(assignment_id, student_id) # copy files over from the source directory self.log.info("Overwriting files with master versions from the source directory") dest_path = self._format_dest(assignment_id, student_id) source_path = self.directory_structure.format( nbgrader_step=self.source_directory, student_id='.', assignment_id=assignment_id) source_files = utils.find_all_files(source_path, self.ignore + ["*.ipynb"]) # copy them to the build directory for filename in source_files: dest = os.path.join(dest_path, os.path.relpath(filename, source_path)) ensure_dir_exists(os.path.dirname(dest)) if not os.path.normpath(dest) == os.path.normpath(filename): self.log.info("Linking %s -> %s", filename, dest) link_or_copy(filename, dest) # ignore notebooks that aren't in the database notebooks = [] for notebook in self.notebooks: notebook_id = os.path.splitext(os.path.basename(notebook))[0] try: gb.find_notebook(notebook_id, assignment_id) except MissingEntry: self.log.warning("Skipping unknown notebook: %s", notebook) continue else: notebooks.append(notebook) self.notebooks = notebooks
def init_assignment(self, assignment_id, student_id): super(AutogradeApp, self).init_assignment(assignment_id, student_id) # try to get the student from the database, and throw an error if it # doesn't exist gb = Gradebook(self.db_url) try: gb.find_student(student_id) except MissingEntry: if self.create_student: self.log.warning("Creating student with ID '%s'", student_id) gb.add_student(student_id) else: self.fail("No student with ID '%s' exists in the database", student_id) # try to read in a timestamp from file src_path = self._format_source(assignment_id, student_id) timestamp = self._get_existing_timestamp(src_path) if timestamp: submission = gb.update_or_create_submission(assignment_id, student_id, timestamp=timestamp) self.log.info("%s submitted at %s", submission, timestamp) # if the submission is late, print out how many seconds late it is if timestamp and submission.total_seconds_late > 0: self.log.warning("%s is %s seconds late", submission, submission.total_seconds_late) else: submission = gb.update_or_create_submission( assignment_id, student_id) # copy files over from the source directory self.log.info( "Overwriting files with master versions from the source directory") dest_path = self._format_dest(assignment_id, student_id) source_path = self.directory_structure.format( nbgrader_step=self.source_directory, student_id='.', assignment_id=assignment_id) source_files = utils.find_all_files(source_path, self.ignore + ["*.ipynb"]) # copy them to the build directory for filename in source_files: dest = os.path.join(dest_path, os.path.relpath(filename, source_path)) ensure_dir_exists(os.path.dirname(dest)) if not os.path.normpath(dest) == os.path.normpath(filename): self.log.info("Linking %s -> %s", filename, dest) link_or_copy(filename, dest) # ignore notebooks that aren't in the database notebooks = [] for notebook in self.notebooks: notebook_id = os.path.splitext(os.path.basename(notebook))[0] try: gb.find_notebook(notebook_id, assignment_id) except MissingEntry: self.log.warning("Skipping unknown notebook: %s", notebook) continue else: notebooks.append(notebook) self.notebooks = notebooks