Skip to content

Commit

Permalink
add moodle export, v0.0.4
Browse files Browse the repository at this point in the history
  • Loading branch information
StevenClontz committed Jul 5, 2021
1 parent 0a32a7b commit 3b62bc1
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 1 deletion.
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.0.3
0.0.4
23 changes: 23 additions & 0 deletions checkit/bank.py
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,28 @@ def write_brightspace_zip(self,public=False,amount=300,regenerate=False):
f.write(zip_buffer.getvalue())
return f"- Brightspace question bank ZIP written to [{build_path}]({self.build_path(public)})"

def moodle_xmle(self,public=False,amount=300,regenerate=False):
root = etree.Element("quiz")
header = etree.SubElement(root,"question")
header.set("type","category")
category = etree.SubElement(header,"category")
category_text = etree.SubElement(category,"text")
category_text.text = f"$course$/top/checkit/{self.slug}"
info = etree.SubElement(header,"info")
info_text = etree.SubElement(info,"text")
info_text.text = self.title
root.append(header)
for o in self.outcomes:
for q in o.moodle_xmle(public,amount,regenerate).xpath("question"):
root.append(q)
return root

def write_moodle_xml(self,public=False,amount=300,regenerate=False):
build_path = os.path.join(self.build_path(public), f"{self.slug}-moodle-question-bank.xml")
et = etree.ElementTree(self.moodle_xmle(public,amount,regenerate))
et.write(build_path)
return f"- Moodle question bank XML written to [{build_path}]({self.build_path(public)})"

def write_pretext_files(self,public=False,amount=300,regenerate=False):
for outcome in self.outcomes:
for n,exercise in enumerate(outcome.generate_exercises(public=public,amount=amount,regenerate=regenerate)[:10]):
Expand Down Expand Up @@ -161,4 +183,5 @@ def build(self,public=False,amount=300,regenerate=False,callback=print):
callback(self.write_canvas_zip(public,amount,regenerate))
callback(self.write_canvas_outcome_csv(public,regenerate))
callback(self.write_brightspace_zip(public,amount,regenerate))
callback(self.write_moodle_xml(public,amount,regenerate))
callback(self.write_pretext_files(public,amount,regenerate))
18 changes: 18 additions & 0 deletions checkit/exercise.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,24 @@ def brightspace_tree(self):
item.find("answer_key//mattext").text = answer_encoded
return item

def moodle_xmle(self):
transform = xsl_transform("html")
root = etree.Element("question")
root.set("type","essay")
name = etree.SubElement(root,"name")
name_text = etree.SubElement(name,"text")
name_text.text = f"{self.outcome.slug} | {self.outcome.title} | ver. {self.seed}"
statement = etree.SubElement(root,"questiontext")
statement.set("format","html")
statement_text = etree.SubElement(statement,"text")
statement_text.text = etree.tostring(transform(self.pretext_tree().find("statement")))
answer = etree.SubElement(root,"generalfeedback")
answer_text = etree.SubElement(answer,"text")
answer_text.text = etree.tostring(transform(self.pretext_tree().find("answer")))
attachments = etree.SubElement(root,"attachments")
attachments.text = "1"
return root

def dict(self):
return {
"seed": self.seed,
Expand Down
15 changes: 15 additions & 0 deletions checkit/outcome.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,21 @@ def brightspace_tree(self,public=False,amount=300,regenerate=False):
tree.getroot().append(exercise.brightspace_tree())
return tree

def moodle_xmle(self,public=False,amount=300,regenerate=False):
root = etree.Element("quiz")
header = etree.SubElement(root,"question")
header.set("type","category")
category = etree.SubElement(header,"category")
category_text = etree.SubElement(category,"text")
category_text.text = f"$course$/top/checkit/{self.bank.slug}/{self.slug}"
info = etree.SubElement(header,"info")
info_text = etree.SubElement(info,"text")
info_text.text = f"{self.slug} | {self.title}"
root.append(header)
for exercise in self.generate_exercises(public,amount,regenerate):
root.append(exercise.moodle_xmle())
return root

def csv_row(self,count,oid_suffix):
return [
f"checkit_{self.bank.slug}_{count:02}_{self.slug}_{oid_suffix:06}",
Expand Down

0 comments on commit 3b62bc1

Please sign in to comment.