Source code for questioned.renderer

"""
Contains functions for rendering to md.
"""


[docs]def render_output(output_format, exam_questions, exam_spec, *args, **kwargs): """ Delegates to the correct renderer based on the output_format. """ # Use old markdown renderer if requested if output_format == 'markdown': exam = introduction_section_md(exam_questions, exam_spec['meta']) exam += question_section_md(exam_questions) exam += answers_section_md(exam_questions) return exam # Otherwise delegate to objects exam = "" for question in exam_questions: exam += question.render(output_format, *args, **kwargs) return exam
[docs]def introduction_section_md(questions, meta: str) -> str: """ Renders out an introduction section. """ out = f"{meta['title']}\n" out += '='.ljust(len(meta['title']), '=') + '\n\n' out += meta['introduction'] out += f"This exam contains {len(questions)} questions.\n\n" return out
[docs]def question_section_md(questions) -> str: """ Renders out the question section to md. """ out = "## Questions \n\n" for number, question in enumerate(questions): out += f"### Question {number +1}\n" out += question.render('markdown') out += '\n' out += '\n\n' return out
[docs]def answers_section_md(questions) -> str: """ Renders out the answers section to md. """ out = "## Answers \n\n" for number, question in enumerate(questions): out += f"{number +1}. {question.answer}\n" return out