Skip to main content

Generate randomized quiz questions for Canvas LMS and PDF exams

Project description

QuizGenerator

Generate randomized quiz questions for Canvas LMS and PDF exams with support for multiple question types, automatic variation generation, and QR code-based answer keys.

Features

  • Multiple Output Formats: Generate PDFs (LaTeX or Typst) and Canvas LMS quizzes
  • Automatic Variations: Create unique versions for each student
  • Extensible: Plugin system for custom question types
  • Built-in Question Library: Memory management, process scheduling, calculus, linear algebra, and more
  • QR Code Answer Keys: Regenerate exact exam versions from QR codes
  • Canvas Integration: Direct upload to Canvas with variation support

Installation

pip install QuizGenerator

System Requirements

  • Python 3.12+
  • LaTeX distribution with latexmk (for PDF generation)
  • Optional: Typst (alternative to LaTeX)

Optional Dependencies

# For QR code grading support
pip install QuizGenerator[grading]

Quick Start

1. Create a quiz configuration (YAML)

# my_quiz.yaml
name: "Midterm Exam"

questions:
  10:  # 10-point questions
    "Process Scheduling":
      class: FIFOScheduling

  5:   # 5-point questions
    "Memory Paging":
      class: PagingQuestion

    "Vector Math":
      class: VectorAddition

2. Generate PDFs

python -m generate_quiz --quiz_yaml my_quiz.yaml --num_pdfs 3

PDFs will be created in the out/ directory.

3. Upload to Canvas

# Set up Canvas credentials in ~/.env first:
# CANVAS_API_URL=https://canvas.instructure.com
# CANVAS_API_KEY=your_api_key_here

python -m generate_quiz \
  --quiz_yaml my_quiz.yaml \
  --num_canvas 5 \
  --course_id 12345

Creating Custom Questions

QuizGenerator supports two approaches for adding custom question types:

Option 1: Entry Points (Recommended for Distribution)

Create a pip-installable package:

# pyproject.toml
[project.entry-points."quizgenerator.questions"]
my_question = "my_package.questions:MyCustomQuestion"

After pip install, your questions are automatically available!

Option 2: Direct Import (Quick & Easy)

Add to your quiz YAML:

custom_modules:
  - my_questions  # Import my_questions.py

questions:
  10:
    "My Question":
      class: MyCustomQuestion

See documentation/custom_questions.md for complete guide.

Built-in Question Types

Operating Systems (CST334)

  • FIFOScheduling, SJFScheduling, RoundRobinScheduling
  • PagingQuestion, TLBQuestion
  • SemaphoreQuestion, MutexQuestion

Machine Learning / Math (CST463)

  • VectorAddition, VectorDotProduct, VectorMagnitude
  • MatrixAddition, MatrixMultiplication, MatrixTranspose
  • DerivativeBasic, DerivativeChain
  • GradientDescentStep

General

  • FromText - Custom text questions
  • FromGenerator - Programmatically generated questions

Documentation

Canvas Setup

  1. Create a ~/.env file with your Canvas credentials:
# For testing/development
CANVAS_API_URL=https://canvas.test.instructure.com
CANVAS_API_KEY=your_test_api_key

# For production
CANVAS_API_URL_prod=https://canvas.instructure.com
CANVAS_API_KEY_prod=your_prod_api_key
  1. Use --prod flag for production Canvas instance:
python -m generate_quiz --prod --num_canvas 5 --course_id 12345

Advanced Features

Typst Support

Use Typst instead of LaTeX for faster compilation:

python -m generate_quiz --typst --num_pdfs 3

Deterministic Generation

Use seeds for reproducible quizzes:

python -m generate_quiz --seed 42 --num_pdfs 3

QR Code Regeneration

Each generated exam includes a QR code that stores:

  • Question types and parameters
  • Random seed
  • Version information

Use the grading tools to scan QR codes and regenerate exact exam versions.

Project Structure

QuizGenerator/
├── QuizGenerator/           # Main package
│   ├── question.py         # Question base classes and registry
│   ├── quiz.py            # Quiz generation logic
│   ├── contentast.py      # Content AST for cross-format rendering
│   ├── premade_questions/ # Built-in question library
│   └── canvas/           # Canvas LMS integration
├── example_files/        # Example quiz configurations
├── documentation/        # User guides
└── generate_quiz.py     # CLI entry point

Contributing

Contributions welcome! Areas of interest:

  • New question types
  • Additional LMS integrations
  • Documentation improvements
  • Bug fixes

License

GNU General Public License v3.0 or later (GPLv3+) - see LICENSE file for details

Citation

If you use QuizGenerator in academic work, please cite:

@software{quizgenerator,
  author = {Ogden, Sam},
  title = {QuizGenerator: Automated Quiz Generation for Education},
  year = {2024},
  url = {https://github.com/OtterDen-Lab/QuizGenerator}
}

Support


Note: This tool is designed for educational use. Ensure compliance with your institution's academic integrity policies when using automated quiz generation.

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

quizgenerator-0.4.1.tar.gz (265.5 kB view details)

Uploaded Source

Built Distribution

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

quizgenerator-0.4.1-py3-none-any.whl (170.0 kB view details)

Uploaded Python 3

File details

Details for the file quizgenerator-0.4.1.tar.gz.

File metadata

  • Download URL: quizgenerator-0.4.1.tar.gz
  • Upload date:
  • Size: 265.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.17 {"installer":{"name":"uv","version":"0.9.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for quizgenerator-0.4.1.tar.gz
Algorithm Hash digest
SHA256 ec776a6a5f851109c047cbfaed40e50d42d864d1110cd5efea82c22a6b773ffe
MD5 debd794b4276e9cda04efff9d60c9e0b
BLAKE2b-256 2ddd4d0767320275a3c287a9c3bd825eefa60fbfd4380e14b02cc14c7e30b3d3

See more details on using hashes here.

File details

Details for the file quizgenerator-0.4.1-py3-none-any.whl.

File metadata

  • Download URL: quizgenerator-0.4.1-py3-none-any.whl
  • Upload date:
  • Size: 170.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.17 {"installer":{"name":"uv","version":"0.9.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for quizgenerator-0.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c51c8ecdf3e99ea4441bd5826f4555e1984a4bcb9a7f3c45ac9add8543225de9
MD5 4f1c4922829b76bf1593551bdd5c7736
BLAKE2b-256 23805625d7968ac9e015de13d338394316411def265676c59c88f94a27677d26

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