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.4.tar.gz (266.2 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.4-py3-none-any.whl (170.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: quizgenerator-0.4.4.tar.gz
  • Upload date:
  • Size: 266.2 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.4.tar.gz
Algorithm Hash digest
SHA256 65ad317b46c784e2d73eb19b6e6b2ef73c60afaa2445ca20fd5096109699947b
MD5 8e027cf8689d2ff24751cd7e33a3e7bd
BLAKE2b-256 f08848e3e91c1dd1ff89d9e844f1151e4df332114da70b6b4fda9d36a0545e7b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: quizgenerator-0.4.4-py3-none-any.whl
  • Upload date:
  • Size: 170.8 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.4-py3-none-any.whl
Algorithm Hash digest
SHA256 c52b3f3483e1e88c0317c532e5ca891aef898a72960a9f3b7707fcedf8d4f019
MD5 e48c1ee20b438ef6c092bc674caddafd
BLAKE2b-256 3e7a2e996f7786eb7e6c2827314fe3a6eee1da68b2456f9434f0de78c9688bf2

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