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.