quizcomp.converter.convert
1import typing 2 3import quizcomp.converter.converter 4import quizcomp.converter.html 5import quizcomp.converter.json 6import quizcomp.converter.markdown 7import quizcomp.converter.tex 8import quizcomp.converter.qti 9import quizcomp.model.constants 10import quizcomp.model.question 11import quizcomp.model.quiz 12 13SUPPORTED_FORMATS: typing.List[quizcomp.model.constants.Format] = [ 14 quizcomp.model.constants.Format.CANVAS, 15 quizcomp.model.constants.Format.HTML, 16 quizcomp.model.constants.Format.JSON, 17 quizcomp.model.constants.Format.MD, 18 quizcomp.model.constants.Format.TEX, 19 quizcomp.model.constants.Format.QTI, 20] 21 22def get_converter_class( 23 format: quizcomp.model.constants.Format = quizcomp.model.constants.Format.JSON, 24 ) -> typing.Type[quizcomp.converter.converter.Converter]: 25 """ Get the converter class for the specified format. """ 26 27 if (format == quizcomp.model.constants.Format.JSON): 28 return quizcomp.converter.json.JSONConverter 29 elif (format == quizcomp.model.constants.Format.HTML): 30 return quizcomp.converter.html.HTMLTemplateConverter 31 elif (format == quizcomp.model.constants.Format.CANVAS): 32 return quizcomp.converter.html.CanvasTemplateConverter 33 elif (format == quizcomp.model.constants.Format.MD): 34 return quizcomp.converter.markdown.MarkdownTemplateConverter 35 elif (format == quizcomp.model.constants.Format.TEX): 36 return quizcomp.converter.tex.TexTemplateConverter 37 elif (format == quizcomp.model.constants.Format.QTI): 38 return quizcomp.converter.qti.QTITemplateConverter 39 else: 40 raise ValueError(f"No known converter for format '{format.value}'.") 41 42def get_converter( 43 format: quizcomp.model.constants.Format = quizcomp.model.constants.Format.JSON, 44 **kwargs: typing.Any, 45 ) -> quizcomp.converter.converter.Converter: 46 """ Get the converter for the specified format. """ 47 48 converter_class = get_converter_class(format = format) 49 return converter_class(**kwargs) 50 51def convert_variant( 52 variant: quizcomp.model.quiz.Variant, 53 format: quizcomp.model.constants.Format = quizcomp.model.constants.Format.JSON, 54 constructor_args: typing.Union[typing.Dict[str, typing.Any], None] = None, 55 converter_args: typing.Union[typing.Dict[str, typing.Any], None] = None, 56 ) -> str: 57 """ Convert a variant to the given format. """ 58 59 if (constructor_args is None): 60 constructor_args = {} 61 62 if (converter_args is None): 63 converter_args = {} 64 65 if (not isinstance(variant, quizcomp.model.quiz.Variant)): 66 raise ValueError(f"convert_variant() requires a quizcomp.model.quiz.Variant type, found {type(variant)}.") 67 68 converter = get_converter(format = format, **constructor_args) 69 return converter.convert_variant(variant, **converter_args) 70 71def convert_question( 72 question: quizcomp.model.question.Question, 73 format: quizcomp.model.constants.Format = quizcomp.model.constants.Format.JSON, 74 constructor_args: typing.Union[typing.Dict[str, typing.Any], None] = None, 75 converter_args: typing.Union[typing.Dict[str, typing.Any], None] = None, 76 ) -> str: 77 """ Convert a question to the given format. """ 78 79 if (constructor_args is None): 80 constructor_args = {} 81 82 if (converter_args is None): 83 converter_args = {} 84 85 converter = get_converter(format = format, **constructor_args) 86 return converter.convert_question(question, **converter_args)
SUPPORTED_FORMATS: List[quizcomp.model.constants.Format] =
[<Format.CANVAS: 'canvas'>, <Format.HTML: 'html'>, <Format.JSON: 'json'>, <Format.MD: 'md'>, <Format.TEX: 'tex'>, <Format.QTI: 'qti'>]
def
get_converter_class( format: quizcomp.model.constants.Format = <Format.JSON: 'json'>) -> Type[quizcomp.converter.converter.Converter]:
23def get_converter_class( 24 format: quizcomp.model.constants.Format = quizcomp.model.constants.Format.JSON, 25 ) -> typing.Type[quizcomp.converter.converter.Converter]: 26 """ Get the converter class for the specified format. """ 27 28 if (format == quizcomp.model.constants.Format.JSON): 29 return quizcomp.converter.json.JSONConverter 30 elif (format == quizcomp.model.constants.Format.HTML): 31 return quizcomp.converter.html.HTMLTemplateConverter 32 elif (format == quizcomp.model.constants.Format.CANVAS): 33 return quizcomp.converter.html.CanvasTemplateConverter 34 elif (format == quizcomp.model.constants.Format.MD): 35 return quizcomp.converter.markdown.MarkdownTemplateConverter 36 elif (format == quizcomp.model.constants.Format.TEX): 37 return quizcomp.converter.tex.TexTemplateConverter 38 elif (format == quizcomp.model.constants.Format.QTI): 39 return quizcomp.converter.qti.QTITemplateConverter 40 else: 41 raise ValueError(f"No known converter for format '{format.value}'.")
Get the converter class for the specified format.
def
get_converter( format: quizcomp.model.constants.Format = <Format.JSON: 'json'>, **kwargs: Any) -> quizcomp.converter.converter.Converter:
43def get_converter( 44 format: quizcomp.model.constants.Format = quizcomp.model.constants.Format.JSON, 45 **kwargs: typing.Any, 46 ) -> quizcomp.converter.converter.Converter: 47 """ Get the converter for the specified format. """ 48 49 converter_class = get_converter_class(format = format) 50 return converter_class(**kwargs)
Get the converter for the specified format.
def
convert_variant( variant: quizcomp.model.quiz.Variant, format: quizcomp.model.constants.Format = <Format.JSON: 'json'>, constructor_args: Optional[Dict[str, Any]] = None, converter_args: Optional[Dict[str, Any]] = None) -> str:
52def convert_variant( 53 variant: quizcomp.model.quiz.Variant, 54 format: quizcomp.model.constants.Format = quizcomp.model.constants.Format.JSON, 55 constructor_args: typing.Union[typing.Dict[str, typing.Any], None] = None, 56 converter_args: typing.Union[typing.Dict[str, typing.Any], None] = None, 57 ) -> str: 58 """ Convert a variant to the given format. """ 59 60 if (constructor_args is None): 61 constructor_args = {} 62 63 if (converter_args is None): 64 converter_args = {} 65 66 if (not isinstance(variant, quizcomp.model.quiz.Variant)): 67 raise ValueError(f"convert_variant() requires a quizcomp.model.quiz.Variant type, found {type(variant)}.") 68 69 converter = get_converter(format = format, **constructor_args) 70 return converter.convert_variant(variant, **converter_args)
Convert a variant to the given format.
def
convert_question( question: quizcomp.model.question.Question, format: quizcomp.model.constants.Format = <Format.JSON: 'json'>, constructor_args: Optional[Dict[str, Any]] = None, converter_args: Optional[Dict[str, Any]] = None) -> str:
72def convert_question( 73 question: quizcomp.model.question.Question, 74 format: quizcomp.model.constants.Format = quizcomp.model.constants.Format.JSON, 75 constructor_args: typing.Union[typing.Dict[str, typing.Any], None] = None, 76 converter_args: typing.Union[typing.Dict[str, typing.Any], None] = None, 77 ) -> str: 78 """ Convert a question to the given format. """ 79 80 if (constructor_args is None): 81 constructor_args = {} 82 83 if (converter_args is None): 84 converter_args = {} 85 86 converter = get_converter(format = format, **constructor_args) 87 return converter.convert_question(question, **converter_args)
Convert a question to the given format.