Source code for grader_convert.converters.generate_feedback



import os
from typing import Any

from nbconvert.exporters import HTMLExporter
from nbconvert.preprocessors import CSSHTMLHeaderPreprocessor
from traitlets import List, default
from traitlets.config import Config

from grader_convert.converters.baseapp import ConverterApp
from grader_convert.preprocessors import GetGrades
from grader_convert.converters.base import BaseConverter


[docs]class GenerateFeedback(BaseConverter): preprocessors = List([GetGrades, CSSHTMLHeaderPreprocessor]).tag(config=True) @default("classes") def _classes_default(self): classes = super(GenerateFeedback, self)._classes_default() classes.append(HTMLExporter) return classes @default("export_class") def _exporter_class_default(self): return HTMLExporter @default("permissions") def _permissions_default(self): return 664 def __init__( self, input_dir: str, output_dir: str, file_pattern: str, **kwargs: Any ): super(GenerateFeedback, self).__init__( input_dir, output_dir, file_pattern, **kwargs ) c = Config() # Note: nbconvert 6.0 completely changed how templates work: they can now be installed separately # and can be given by name (classic is default) if "template" not in self.config.HTMLExporter: template_path = os.path.abspath( os.path.join( os.path.dirname(__file__), "..", "templates", ) ) # '/Users/matthiasmatt/opt/miniconda3/envs/grader/share/jupyter/nbconvert/templates/classic/index.html.j2' c.TemplateExporter.extra_template_basedirs = template_path c.HTMLExporter.template_name = "feedback" self.update_config(c) self.force = True # always overwrite generated assignments
[docs]class GenerateFeedbackApp(ConverterApp): version = ConverterApp.__version__
[docs] def start(self): GenerateFeedback( input_dir=self.input_directory, output_dir=self.output_directory, file_pattern=self.file_pattern, config=self.config ).start()