Skip to content

Commit

Permalink
Changed the dictionary a bit to avoid non-standard keys for each object.
Browse files Browse the repository at this point in the history
  • Loading branch information
rolfis committed Jan 15, 2021
1 parent 8878c6d commit 6fe7a80
Showing 1 changed file with 40 additions and 39 deletions.
79 changes: 40 additions & 39 deletions src/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,60 +8,61 @@
__license__ = "Apache"

import argparse
import json
from logzero import logger
from lxml import etree

qti_resource = {}
qti_resource = {
'assessments': []
}

def main(args):
""" Main entry point of the app """
logger.info("Main program starting point.")
logger.info("QTI converter utility.")
logger.info(args)

xml_doc = etree.parse(args.filename)
try:
xml_doc = etree.parse(args.input)

for xml_resource in xml_doc.getroot().findall(".//{http://www.imsglobal.org/xsd/imsccv1p1/imscp_v1p1}resource[@type='imsqti_xmlv1p2']"):
this_resource_id = xml_resource.get("identifier")
qti_resource[this_resource_id] = {}
qti_resource[this_resource_id]['id'] = this_resource_id
qti_resource[this_resource_id]['href'] = xml_resource.find("{http://www.imsglobal.org/xsd/imsccv1p1/imscp_v1p1}file").get("href")
qti_resource[this_resource_id]['title'] = etree.parse(qti_resource[xml_resource.get("identifier")]['href']).getroot().find("{http://www.imsglobal.org/xsd/ims_qtiasiv1p2}assessment").get("title")
qti_resource[this_resource_id]['items'] = {}
for xml_resource in xml_doc.getroot().findall(".//{http://www.imsglobal.org/xsd/imsccv1p1/imscp_v1p1}resource[@type='imsqti_xmlv1p2']"):
this_assessment = {
'id': xml_resource.get("identifier"),
'title': '',
'questions': []
}
this_assessment_xml = this_assessment['id'] + "/" + this_assessment['id'] + ".xml"

for xml_item in etree.parse(qti_resource[xml_resource.get("identifier")]['href']).getroot().findall(".//{http://www.imsglobal.org/xsd/ims_qtiasiv1p2}item"):
this_item_id = xml_item.get("ident")
qti_resource[this_resource_id]['items'][this_item_id] = {}
qti_resource[this_resource_id]['items'][this_item_id]['id'] = this_item_id
qti_resource[this_resource_id]['items'][this_item_id]['title'] = xml_item.find("{http://www.imsglobal.org/xsd/ims_qtiasiv1p2}presentation/{http://www.imsglobal.org/xsd/ims_qtiasiv1p2}material/{http://www.imsglobal.org/xsd/ims_qtiasiv1p2}mattext").text
for xml_item in etree.parse(this_assessment_xml).getroot().findall(".//{http://www.imsglobal.org/xsd/ims_qtiasiv1p2}item"):
this_question = {
'id': xml_item.get("ident"),
'text': xml_item.find("{http://www.imsglobal.org/xsd/ims_qtiasiv1p2}presentation/{http://www.imsglobal.org/xsd/ims_qtiasiv1p2}material/{http://www.imsglobal.org/xsd/ims_qtiasiv1p2}mattext").text,
'answers': []
}
this_assessment['questions'].append(this_question)
this_assessment['title'] = etree.parse(this_assessment_xml).getroot().find("{http://www.imsglobal.org/xsd/ims_qtiasiv1p2}assessment").get("title")

for assessment in qti_resource:
a = qti_resource[assessment]
print(a['id'] + " " + a['title'])
for item in a['items']:
i = a['items'][item]
print(i['id'] + i['title'])

# multiple_choice_question
# short_answer_question

if __name__ == "__main__":
""" This is executed when run from the command line """
parser = argparse.ArgumentParser(description="Convert QTI files into other formats.")
qti_resource['assessments'].append(this_assessment)

qti_resource_json = json.dumps(qti_resource, indent = 2)
print(qti_resource_json)

# Input file
parser.add_argument("filename", help="QTI input file")
except OSError as e:
logger.error("%s", e)

# Optional verbosity counter (eg. -v, -vv, -vvv, etc.)
parser.add_argument(
"-v",
"--verbose",
action="count",
default=0,
help="verbosity (-v, -vv, etc)")
except etree.ParseError as e:
logger.error("XML parser error: %s", e)

# Specify output of "--version"
parser.add_argument(
"--version",
action="version",
version="%(prog)s (version {version})".format(version=__version__))

if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Convert QTI files into other formats.", add_help=False)
parser.add_argument("input", help="QTI input file.")
parser.add_argument("-v", action="count", default=0, help="Verbosity (-v, -vv, etc).")
parser.add_argument("-f", action="store", dest="format", default="json", help="Output format, defaults to JSON.")
parser.add_argument( "--version", action="version", help="Display version and exit.", version="%(prog)s (version {version})".format(version=__version__))
parser.add_argument('-h', '--help', action='help', default=argparse.SUPPRESS, help='Show this help message and exit.')
args = parser.parse_args()
print(args)
main(args)

0 comments on commit 6fe7a80

Please sign in to comment.