Skip to main content

Automated Gradescope submission tool for QUT students with a pretty CLI interface

Project description

QUT Gradescope Auto Submitter

PyPI

As a QUT student, I was tired of:

  • Clicking through Gradescope 50+ times per assignment when trying to see if I met test cases
  • Being forced to wait when I'm trying to get quick feedback on my work
  • Losing focus context switching between code editor and browser
  • Manual file compression, uploads and form submissions

This tool automates the submission process so you can focus on coding, not clicking.

https://github.com/user-attachments/assets/42f96ca3-e640-4c72-8ba7-c43932be0d79

Install

Recommended — pipx (installs the CLI globally, separate from your project venv):

pipx install qut-gradescope-autosubmitter && playwright install chromium

If playwright isn't found after pipx, either pip install playwright once or use pipx install --include-deps qut-gradescope-autosubmitter so the Playwright CLI lands on your PATH.

Other options: pip install qut-gradescope-autosubmitter && playwright install chromium, or clone this repo and pip install -e ..

Run gradescope doctor if anything looks broken after install.

Usage

From your assignment repo (where your code lives):

gradescope init          # creates gradescope.yml
gradescope login         # once — browser opens for QUT SSO + 2FA
gradescope submit        # zip, upload, wait for autograder (optional)

What submit does:

  1. Reads gradescope.yml for course, assignment, and which files to include.
  2. Builds a zip from tracked git files matching your include globs.
  3. Opens Gradescope in Chromium (or runs headless if you already logged in).
  4. Finds your course and assignment, uploads the zip, and handles resubmits.
  5. If notify_when_graded: true, polls until a score appears in the terminal.

You run this whenever you want feedback — same loop as clicking through Gradescope yourself, minus the manual steps.

Login & session (why not passwords?)

QUT SSO requires 2FA, so the CLI doesn't ask for your password. That would mean storing credentials and trying to script around 2FA — brittle and not worth it for a coursework helper.

Instead, gradescope login opens a normal browser window. You sign in and complete 2FA yourself. The tool saves a Chromium profile under ~/.cache/qut_gradescope (cookies + local storage — like staying logged in on Chrome).

After that, gradescope submit reuses that session. No password in config, no secrets in env vars. If the session expires, run login again.

With a saved session you can set headless: true in config so submit runs without a visible window.

Config (gradescope.yml)

course: "cab201"           # partial match on Gradescope course name
assignment: "t6q1"         # partial match on assignment name
zip_name: submission.zip
include:
  - "*.py"
notify_when_graded: true   # wait for autograder score after upload
headless: false

In a git repo, only files from git ls-files are considered (respects .gitignore).

Git hooks (optional)

To submit on every commit from your assignment repo:

gradescope hooks --install post-commit --quick

Remove with rm .git/hooks/post-commit. Install hooks per repo, not in this tool repo.

Requirements

Python 3.8+, QUT Gradescope access, Chromium (via Playwright).

Changelog

2.0.1

  • gradescope login closes the browser automatically after SSO (no Enter prompt).

2.0.0

  • Browser session auth (login / saved profile) — 2FA handled by you once in the browser.
  • Slimmer CLI, orange Rich output, include globs, git-based bundling.
  • Pytest CI; removed GitHub Action submit workflows (use local submit or hooks).

1.0.5

  • README: QUT 2FA called out explicitly.
  • Removed scheduled-submit workflow.

1.0.4

  • Python 3.8 compatibility fix (Optional typing in credentials helper).

1.0.3

  • Clearer errors for wrong username/password.
  • Headless/SSH: link to submission page when the browser can't stay open.

1.0.2

  • Maintenance release (tagged on GitHub).

1.0.1

  • First public PyPI release.
  • Rich CLI, Playwright automation, gradescope.yml, git hooks, optional GitHub Action submit.

Pre-1.0.1

Early TestPyPI builds before the stable 1.0 line.

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

qut_gradescope_autosubmitter-2.0.2.tar.gz (20.3 kB view details)

Uploaded Source

Built Distribution

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

qut_gradescope_autosubmitter-2.0.2-py3-none-any.whl (17.5 kB view details)

Uploaded Python 3

File details

Details for the file qut_gradescope_autosubmitter-2.0.2.tar.gz.

File metadata

File hashes

Hashes for qut_gradescope_autosubmitter-2.0.2.tar.gz
Algorithm Hash digest
SHA256 74eb752c52841390e90b65c820f98fb07b235cf5903bd34a1c8c52056d8db632
MD5 382342cb3799bfc567b3e55731780d28
BLAKE2b-256 e45b4ffc3863cd87ba98f56271ddf66bd57d13fe10b4867e980d9b5c00fad8e7

See more details on using hashes here.

Provenance

The following attestation bundles were made for qut_gradescope_autosubmitter-2.0.2.tar.gz:

Publisher: python-publish.yml on danieltsam/qut-gradescope-autosubmitter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file qut_gradescope_autosubmitter-2.0.2-py3-none-any.whl.

File metadata

File hashes

Hashes for qut_gradescope_autosubmitter-2.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 fb7b034c8302d66ac670a05d1ccd602dae2781285e4fa6056e5b7f0c9fc027dc
MD5 822c530b1bf253524a045381569c978f
BLAKE2b-256 43e73eca55f9212ce0aa35126d306d48ece15ab4aceaa44cc87d4edce8c29379

See more details on using hashes here.

Provenance

The following attestation bundles were made for qut_gradescope_autosubmitter-2.0.2-py3-none-any.whl:

Publisher: python-publish.yml on danieltsam/qut-gradescope-autosubmitter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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