Metadata-Version: 2.4
Name: better-gradescope-utils
Version: 1.0.0
Summary: Utilities for building Gradescope autograders, with extended functionality
Project-URL: Homepage, https://github.com/RobertConde/better-gradescope-utils
Project-URL: Repository, https://github.com/RobertConde/better-gradescope-utils
Project-URL: Issues, https://github.com/RobertConde/better-gradescope-utils/issues
Author-email: Robert Conde <conder@ufl.edu>
License-Expression: MIT
License-File: LICENSE
Keywords: autograder,gradescope,grading,unittest
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Education
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Education :: Testing
Classifier: Topic :: Software Development :: Testing
Requires-Python: >=3.8
Provides-Extra: django
Requires-Dist: django; extra == 'django'
Description-Content-Type: text/markdown

# Better Gradescope Python Utilities

[![PyPI version](https://badge.fury.io/py/better-gradescope-utils.svg)](https://badge.fury.io/py/better-gradescope-utils)

A fork of [gradescope/gradescope-utils](https://github.com/gradescope/gradescope-utils)
with extended functionality (e.g. `extra_data`, `output_format`, and a Django test
runner).

> **Note:** the import name is `better_gradescope_utils` (not `gradescope_utils`).

## Installing

```bash
pip install better-gradescope-utils
```

To include the Django test runner integration:

```bash
pip install "better-gradescope-utils[django]"
```

## Packages

- [Autograder Utilities](/better_gradescope_utils/autograder_utils)

## Developing

This project uses [uv](https://docs.astral.sh/uv/).

```bash
# Create the environment and install the project (with dev + docs tooling)
uv sync --all-extras --group dev --group docs

# Build the sdist and wheel locally
uv build
```

## Releasing new versions

Releases are published to PyPI automatically by GitHub Actions using
[trusted publishing (OIDC)](https://docs.pypi.org/trusted-publishers/) — no API
tokens are stored. See the one-time setup notes below.

1. Bump `__version__` in `better_gradescope_utils/__init__.py`.
2. Commit and push to `main`.
3. Tag the release and push the tag:
   ```bash
   git tag v1.0.0
   git push origin v1.0.0
   ```
   - Pushing a `vX.Y.Z` tag publishes to **PyPI**.
   - Pushing a `testX.Y.Z` tag publishes to **TestPyPI** (for dry runs).
4. (Optional) Draft a GitHub Release from the tag for auto-generated notes.

### One-time PyPI setup (trusted publishing)

On [PyPI](https://pypi.org/manage/account/publishing/) (and, if you want dry
runs, [TestPyPI](https://test.pypi.org/manage/account/publishing/)), add a
**pending publisher** so PyPI trusts this repo's workflow:

| Field             | Value                          |
| ----------------- | ------------------------------ |
| PyPI Project Name | `better-gradescope-utils`      |
| Owner             | `RobertConde`                  |
| Repository name   | `better-gradescope-utils`      |
| Workflow name     | `build-and-publish.yml`        |
| Environment name  | `pypi` (or `testpypi`)         |

The `pypi` / `testpypi` GitHub Actions environments referenced in the workflow
are created automatically on first use.
