Skip to main content

A package to export test questions into Moodle from python or latex

Project description

moodlexport

This Python module provides code which allows to easily generate families of questions (called categories in Moodle) that can be directly exported from either Python or Latex to Moodle, and use them to create a test. The main motivation behind this module is that :

  • it is easier to define mathematical objects in Python than Moodle
  • it is more comfortable to type maths in Latex
  • generating random problems is simpler in Python and can go way beyond what Moodle proposes
  • it is easier to store/manipulate locally a Latex or Python file than doing it on the Moodle interface. It also simplifies collaborating projects.

It can be installed with a pip command : pip install moodlexport

Simple examples from Python:

from moodlexport import Question

question = Question("essay")
question.text("What is the derivative of $f(x) = e^x + 0.5 \Vert x \Vert^2$?")
question.grade(1.5)
question.save("my first question")

Simple examples from Latex

You can produce the same result as above by defining your question directly in a Latex file. Suppose for isntance that you have a Latex file myquestion.tex containing the following :

\documentclass{amsart}
\usepackage{latextomoodle}
\begin{document}
\begin{question}[essay]
What is the derivative of $f(x) = e^x + 0.5 \Vert x \Vert^2$?
\grade{1.5}
\end{question}
\end{document}

Then you can convert this myquestion.tex file directly into a readytoexport.xml file, by using the following Python commands:

from moodlexport import latextomoodle
latextomoodle('myquestion.tex','my first question')

Note that if you wish to compile the .tex file without errors, you will need to place the Latex package latextomoodle.sty in the same folder. This package can be found in the latex folder of this project.

Exporting many questions at once

If you want to export more than one question, you might want to gather them within a category, which will produce a single file containing all those questions. Here is how to proceed:

In Python:

from moodlexport import Question, Category

category = Category("My little catgory name")

question = Question("essay")
question.text("What is the derivative of $f(x) = e^x + 0.5 \Vert x \Vert^2$?")
question.grade(1.5)
question.addto(category)
              
question = Question("multichoice")
question.text("Is every symmetric matrix invertible?")
question.grade(2.0)
question.answer("Yes", False)
question.answer("No", True)
question.addto(category)

category.save()

In Latex, followed by the python command latextomoodle('file_name.tex') :

\documentclass{amsart}
\usepackage{latextomoodle}
\begin{document}
\begin{category}[My little catgory name]
\begin{question}[essay]
What is the derivative of $f(x) = e^x + 0.5 \Vert x \Vert^2$?
\grade{1.5}
\end{question}
\begin{question}[multichoice]
Is every symmetric matrix invertible?
\answer[0]{Yes}
\answer[100]{No}
\grade{2.0}
\end{question}
\end{category}
\end{document}

Features of this module so far :

  • Creating a question. Supported classes of questions are:
    • "essay" : the student answers in a white text box. Options are :
      • Possibility for the student to upload a file as an answer as well.
    • "multichoice" : the question comes with at least 2 possible answers. Options are :
      • Possibility to specify "multiple answers allowed" or "unique answer allowed"
  • All the options available in Moodle are available here (defining a grade, information for the grader, feedback, etc)
  • Creating a category (family) of questions
  • Adding a question to a given category
  • Export a category of questions under the format Moodle XML, which can be imported directly into Moodle.
  • Supports Unicode éàê ...
  • Supports Latex syntax : correctly supports inline latex with $e^x$, and equation with $$ f(x) = \sum_i x_i^2 $$, \begin{equation*}...\end{equation*}, \begin{cases} etc

Known issues/missing features :

  • for multichoice we never check that the sum of the fractions is equal to 100%
  • for the latex package, there is issues with newcommand and renewcommand because for instance the document class amsart defines text but it is not the case for article.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

moodlexport-0.0.5.tar.gz (7.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

moodlexport-0.0.5-py3.7.egg (13.8 kB view details)

Uploaded Egg

File details

Details for the file moodlexport-0.0.5.tar.gz.

File metadata

  • Download URL: moodlexport-0.0.5.tar.gz
  • Upload date:
  • Size: 7.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.42.0 CPython/3.7.6

File hashes

Hashes for moodlexport-0.0.5.tar.gz
Algorithm Hash digest
SHA256 1611d34c252e53ff15ab25a234393b5654b23bf9e48083dce817e32e6166d5b8
MD5 452a900c9ec7116067b6f6e5c95f2ed9
BLAKE2b-256 5266f3c3257978137b7759abd96cafad2d2b27025e487e8218714baa6a710cf3

See more details on using hashes here.

File details

Details for the file moodlexport-0.0.5-py3.7.egg.

File metadata

  • Download URL: moodlexport-0.0.5-py3.7.egg
  • Upload date:
  • Size: 13.8 kB
  • Tags: Egg
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.42.0 CPython/3.7.6

File hashes

Hashes for moodlexport-0.0.5-py3.7.egg
Algorithm Hash digest
SHA256 32809f05cfdf32a233b282687cb6e7e833b1762583fc1793014e5a8347f3a256
MD5 f2823181663cb5dafde4d4d9e50a9589
BLAKE2b-256 bd19c4669ece95610f6cba6d5ceca207df0b65ec3803a8841e475b93fa49e051

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page