Example #1
0
def add_footer_to_template(coursedir, path, footer_source):
    presetmodel = PresetModel(coursedir)
    nb = nbformat.read(path, as_version=nbformat.NO_CONVERT)
    footer_cells = presetmodel.get_template_preset("Footer")
    footer_cells[0].source = footer_source
    nb.cells.extend(footer_cells)
    nbformat.write(nb, path)
    return path
Example #2
0
def add_template_with_header(coursedir, name, header_source):
    templatemodel = TemplateModel(coursedir)
    presetmodel = PresetModel(coursedir)
    res = templatemodel.new(name=name)

    nb = nbformat.read(res["path"], as_version=nbformat.NO_CONVERT)
    header_cells = presetmodel.get_template_preset("Header")
    header_cells[0].source = header_source
    nb.cells = header_cells
    nbformat.write(nb, res["path"])
    return res["path"]
Example #3
0
def add_question_to_task(coursedir,
                         path,
                         question_type,
                         grade_id=None,
                         points=0):
    presetmodel = PresetModel(coursedir)
    nb = nbformat.read(path, as_version=nbformat.NO_CONVERT)
    cells = presetmodel.get_question_preset(question_type)
    if grade_id is not None:
        for cell in cells:
            cell.metadata.nbgrader.grade_id = cell.metadata.nbgrader.grade_id.replace(
                "task", grade_id)
            if is_grade(cell):
                cell.metadata.nbgrader.points = points
    nb.cells.extend(cells)
    nbformat.write(nb, path)
    return path
Example #4
0
class TestExtraCells(unittest.TestCase):
    def setUp(self):
        tmp_dir, coursedir = create_temp_course()
        self.tmp_dir = tmp_dir
        self.model = PresetModel(coursedir)
        self.multiplechoice = "Multiple Choice"

    def test_extra_cell(self):
        assert not is_extra_cell(nbformat.v4.new_code_cell())

        cells = self.model.get_question_preset(self.multiplechoice)
        assert is_extra_cell(cells[0])

    def test_multiplechoice_cell(self):
        cells = self.model.get_question_preset(self.multiplechoice)
        assert is_multiplechoice(cells[0])

    def test_singlechoice_cell(self):
        cells = self.model.get_question_preset("Single Choice")
        assert is_singlechoice(cells[0])

    def test_get_choices(self):
        cells = self.model.get_question_preset(self.multiplechoice)
        assert len(get_choices(cells[0])) == 0

        cells[0].metadata.extended_cell.choice = [1, 2, 3]

        assert len(get_choices(cells[0])) == 3
        assert all([i in get_choices(cells[0]) for i in [1, 2, 3]])

    def test_get_num_of_choices(self):
        cells = self.model.get_question_preset("Single Choice")
        assert get_num_of_choices(cells[0]) is None

        cells = self.model.get_question_preset(self.multiplechoice)
        assert get_num_of_choices(cells[0]) == 3

    def test_clear_choices(self):
        cells = self.model.get_question_preset(self.multiplechoice)
        cells[0].metadata.extended_cell.choice = [1, 2, 3]

        clear_choices(cells[0])
        assert len(get_choices(cells[0])) == 0

    def test_has_solution(self):
        cells = self.model.get_question_preset(self.multiplechoice)
        assert not has_solution(cells[0])

    def tearDown(self):
        self.tmp_dir.cleanup()
 def setUp(self):
     tmp_dir, coursedir = create_temp_course()
     self.nb = new_notebook()
     self.nb.cells = PresetModel(coursedir).get_question_preset("Single Choice")
     tmp_dir.cleanup()
Example #6
0
 def test_is_description_cell(self):
     model = PresetModel(self.coursedir)
     freetext = model.get_question_preset("Freetext")
     assert is_description(freetext[0])
     assert not is_description(freetext[1])
Example #7
0
 def setUp(self):
     tmp_dir, coursedir = create_temp_course()
     self.tmp_dir = tmp_dir
     self.model = PresetModel(coursedir)
     self.multiplechoice = "Multiple Choice"
class TestPresetModel(unittest.TestCase):
    def setUp(self):
        tmp_dir, coursedir = create_temp_course()
        self.tmp_dir = tmp_dir
        self.model = PresetModel(coursedir)

    def test_list_question_presets(self):
        presets = [
            "Code (Autograded)",
            "Code (Manual)",
            "Freetext",
            "Multiple Choice",
            "Single Choice",
        ]
        questions = self.model.list_question_presets()
        for preset in presets:
            assert preset in questions, f"Preset {preset} not found"

    def test_get_question_preset(self):
        question_presets = self.model.list_question_presets()

        for preset in question_presets:
            question_cells = self.model.get_question_preset(preset)
            assert all(
                [
                    isinstance(cell, nbformat.notebooknode.NotebookNode)
                    for cell in question_cells
                ]
            )

    def test_list_template_presets(self):
        presets = ["Header", "Footer", "Group Info", "Student Info"]
        template_presets = self.model.list_template_presets()
        for preset in presets:
            assert preset in template_presets, f"Preset {preset} not found"

    def test_get_template_preset(self):
        template_presets = self.model.list_template_presets()

        for preset in template_presets:
            template_cells = self.model.get_template_preset(preset)
            assert all(
                [
                    isinstance(cell, nbformat.notebooknode.NotebookNode)
                    for cell in template_cells
                ]
            )

    def test_get_invalid_preset(self):
        assert self.model.get_question_preset("Invalid Name") is None
        assert self.model.get_template_preset("Invalid Name") is None

    def test_custom_template_preset_path(self):
        nbformat.write(
            nbformat.v4.new_notebook(), pjoin(self.tmp_dir.name, "MyPreset.ipynb")
        )
        self.model.template_preset_path = self.tmp_dir.name
        assert len(self.model.list_template_presets()) == 1
        assert "MyPreset" in self.model.list_template_presets()

    def test_custom_task_preset_path(self):
        nbformat.write(
            nbformat.v4.new_notebook(), pjoin(self.tmp_dir.name, "MyPreset.ipynb")
        )
        self.model.task_preset_path = self.tmp_dir.name
        assert len(self.model.list_question_presets()) == 1
        assert "MyPreset" in self.model.list_question_presets()

    def tearDown(self):
        self.tmp_dir.cleanup()
 def setUp(self):
     tmp_dir, coursedir = create_temp_course()
     self.tmp_dir = tmp_dir
     self.model = PresetModel(coursedir)