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,RoundRobinSchedulingPagingQuestion,TLBQuestionSemaphoreQuestion,MutexQuestion
Machine Learning / Math (CST463)
VectorAddition,VectorDotProduct,VectorMagnitudeMatrixAddition,MatrixMultiplication,MatrixTransposeDerivativeBasic,DerivativeChainGradientDescentStep
General
FromText- Custom text questionsFromGenerator- Programmatically generated questions
Documentation
- Getting Started Guide (coming soon)
- Custom Questions Guide
- YAML Configuration Reference (coming soon)
- PyPI Release Plan
Canvas Setup
- Create a
~/.envfile 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
- Use
--prodflag 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
- Issues: https://github.com/OtterDen-Lab/QuizGenerator/issues
- Documentation: https://github.com/OtterDen-Lab/QuizGenerator/tree/main/documentation
Note: This tool is designed for educational use. Ensure compliance with your institution's academic integrity policies when using automated quiz generation.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file quizgenerator-0.4.2.tar.gz.
File metadata
- Download URL: quizgenerator-0.4.2.tar.gz
- Upload date:
- Size: 266.1 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
57294869ff5f4fa844afeceb2471233916f636b91d0677efbafd71f86fa207bf
|
|
| MD5 |
eb62f22437adf221f492053886072f70
|
|
| BLAKE2b-256 |
2e4e46caacd73acd01d8df7c460b119cb45041573c5568104b2d1abb9fcb3f95
|
File details
Details for the file quizgenerator-0.4.2-py3-none-any.whl.
File metadata
- Download URL: quizgenerator-0.4.2-py3-none-any.whl
- Upload date:
- Size: 170.6 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5d8e78267d44062cff9ae66be891c31028f57a4a7d7966f9b361cec384b7f3fb
|
|
| MD5 |
97c5accdd1e73d4f71622385f78e2944
|
|
| BLAKE2b-256 |
411b719615e9c3620f5ff02a60cb6025d56e3f6c2a6f4e0cdce21b535e88b36f
|