CLI grading toolkit for GitHub Classroom and Canvas LMS — track submissions, deadlines, and sync grades
Project description
cass
Grading toolkit for Canvas LMS and GitHub Classroom — pull rosters, track submissions, edit grades, and push them back to Canvas.
All data lives in a local SQLite database (cass.db) alongside a version-trackable cass.toml config.
Prerequisites
- uv (Python package manager)
- GitHub CLI (
gh) — required for install and for GitHub Classroom features
Install
# Check authentication with GitHub (one-time)
gh auth status
# Login if needed
gh auth login
# Install cass as a CLI tool
uv tool git+https://github.com/ejolly/cass.git
To update to the latest version:
uv tool git+https://github.com/ejolly/cass.git --reinstall
After install, cass is available globally.
Get started
Setup (one-time)
# Will ask you for canvas token and save to .canvastoken
cass init
Pull latest data
cass pull
Open Viewer
cass view
- The only tables/spreadsheets you can edit in the viewer are Canvas Gradebook & Assignments
- Just double-click a cell to edit the value like in google-sheets. Changed cells will appear in orange.
- When you're done editing press (e.g. multiple cells) press push button in the top left to send updates to Canvas
CLI
Everything you can do from the viewer you (or Claude) can do from the CLI:
cass init # interactive config setup
cass pull # fetch students, assignments, submissions
cass status # overview of local state and sync status
cass revert # discard pending local changes
cass push # preview + confirm pending Canvas changes
cass push --yes # skip confirmation
# Canvas management
cass canvas # course overview
cass canvas people # enrolled students
cass canvas modules # list / create / publish modules
cass canvas assignments # list / create assignments
cass canvas upload file.pdf
cass canvas announce "Title" "Body"
# Data management
# query also accepts --where, --order, and --limit
cass query students # roster
cass query assignments # assignment metadata
cass query submissions # submissions dataset
cass query gradebook # student x assignment matrix
cass query --sql "select count(*) from students"
cass backup # timestamped snapshot → backups/
cass backup --tag "pre-regrade"
cass restore backups/cass_2026-03-05.db
Running cass with no arguments shows help.
Configuration
cass.toml lives in your project root. Canvas is required; GitHub Classroom is optional.
[canvas]
base_url = "https://canvas.ucsd.edu"
course_id = 72335
# Optional — enables submission tracking and roster matching
[classroom]
id = 299058
org = "psyc-201"
Development
uv sync # install deps
uv run poe lint # ruff format + check, ty
uv run poe test # pytest
uv run poe install # install as global CLI tool
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 cassroom-0.1.1.tar.gz.
File metadata
- Download URL: cassroom-0.1.1.tar.gz
- Upload date:
- Size: 277.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e52adc2d5903862c5af37cde2c8dceca149064bc8d25b43eaa4d820bd6c6e613
|
|
| MD5 |
08b898131c70e81cb0d9401a6ee91869
|
|
| BLAKE2b-256 |
a87c99de020a53ebc939665a4664bf6424effdfa56b76c8414c4793e015b0d80
|
File details
Details for the file cassroom-0.1.1-py3-none-any.whl.
File metadata
- Download URL: cassroom-0.1.1-py3-none-any.whl
- Upload date:
- Size: 122.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d731cf7bef9ecb1330c4a2d81bc8398c009cd8adc387b890b7160c4d6bc8ff2
|
|
| MD5 |
e0bf4ddd34378474b76396a52638ecd8
|
|
| BLAKE2b-256 |
925e71d8a08372f22f6a630afb57f981a9d74e6f044d171fedbeba50ba47bcc4
|