Skip to main content

A command-line tool for managing SPDX headers in Python source files

Project description

SPDX Headers

PyPI version License: AGPL v3 License ComplianceDownloads

spdx-headers is a command-line tool for auditing and maintaining SPDX license headers in Python projects. It can add, verify, and update SPDX headers, extract license texts, and integrates seamlessly with pre-commit.

Table of Contents

  1. Features
  2. Installation
  3. Quick Start
  4. Core Commands
  5. Using As a Pre-Commit Hook
  6. Documentation
  7. Contributing
  8. License

Features

  • Automated SPDX management – add, change, remove, or verify headers across your Python sources.
  • Auto-fix missing headers – infer the repository’s SPDX identifier and repair files automatically.
  • SPDX license data updates – fetches the latest license list directly from SPDX.
  • Pre-commit integration – ships with a hook that can block commits or auto-fix issues.
  • License extraction – generate LICENSE files by SPDX identifier.
  • Dry-run support – inspect changes before applying them.
  • Typed codebase – includes py.typed for first-class type checking.
  • Flexible license viewing – preview SPDX license summaries and optionally keep the generated files for reference.
  • Configurable exclusions – opt specific files out of header checks via a .spdx-headers.ini file.

Installation

pip install spdx-headers

Working from Source (with uv)

The development workflow relies on uv for dependency management. Install it first:

curl -LsSf https://astral.sh/uv/install.sh | sh
# or: pipx install uv

Then clone the repository and install dependencies:

git clone https://github.com/uglyegg/spdx-tools.git
cd spdx-tools
uv sync --dev
uv run pre-commit install

Quick Start

# Add AGPL-3.0-or-later headers to all Python files
spdx-headers --add AGPL-3.0-or-later

# Verify all files have valid SPDX headers
spdx-headers --verify

# Check (CI friendly) and auto-fix missing headers when possible
spdx-headers --check --fix

# List SPDX identifiers containing “Apache”
spdx-headers --list Apache

# Extract the MIT license into LICENSE-MIT
spdx-headers --extract --add MIT --dry-run

Core Commands

Command Description
spdx-headers --add LICENSE Add the specified SPDX header to all Python files.
spdx-headers --change LICENSE Replace existing headers with the specified SPDX identifier.
spdx-headers --remove Remove SPDX headers from all Python files.
spdx-headers --verify Print a report of files missing headers (no exit code).
spdx-headers --check [--fix] Return exit code 0/1 depending on compliance; --fix attempts auto-repair and the command reports detected SPDX identifiers (listing files if multiple licenses are found).
spdx-headers --list [KEYWORD] List available SPDX identifiers, optionally filtering by keyword.
spdx-headers --show LICENSE [--keep-temp] Display a license summary using the system’s default viewer (optionally keep the temp file).
spdx-headers --extract [KEYWORD] [--add LICENSE] Extract license text for identifiers matching KEYWORD; combine with --add/--change to write headers and license text together.
spdx-headers --update Download the latest SPDX license data.
.spdx-headers.ini Optional configuration file used to exclude generated/vendor files from checks.

See docs/usage.md for a comprehensive walkthrough.

Using As a Pre-Commit Hook

spdx-headers ships with a pre-commit hook that checks for (and can auto-fix) missing headers. Add the following to your .pre-commit-config.yaml:

- repo: https://github.com/uglyegg/spdx-tools
  rev: v1.0.0
  hooks:
    - id: spdx-header-check

The bundled configuration automatically runs spdx-headers --check --fix, so files missing a header are rewritten when the repository has a consistent SPDX identifier. See docs/pre-commit.md for advanced configuration.

Documentation

Contributing

Contributions are welcome! Please open an issue or pull request. When submitting changes:

  1. Run make check to execute formatting, lint, mypy, and test suites.
  2. Update or add documentation in docs/ if behaviour changes.
  3. Add tests covering new functionality.

License

This project is licensed under the GNU Affero General Public License v3.0 or later (AGPL-3.0-or-later). See the LICENSE file for details. Additional license texts can be generated via spdx-headers --extract.

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

spdx_headers-1.0.3.tar.gz (89.0 kB view details)

Uploaded Source

Built Distribution

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

spdx_headers-1.0.3-py3-none-any.whl (60.1 kB view details)

Uploaded Python 3

File details

Details for the file spdx_headers-1.0.3.tar.gz.

File metadata

  • Download URL: spdx_headers-1.0.3.tar.gz
  • Upload date:
  • Size: 89.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for spdx_headers-1.0.3.tar.gz
Algorithm Hash digest
SHA256 bf78cd45e37c27ddf4349fe09c555e52219be03e3a741684840232b6eb5b4f87
MD5 beae7a1be573d2264da74cabdbb176bd
BLAKE2b-256 0f74924cf896ea6a6596fd9c4520b5559d14b20ae4955f1d71b7ac1e1ea617eb

See more details on using hashes here.

File details

Details for the file spdx_headers-1.0.3-py3-none-any.whl.

File metadata

  • Download URL: spdx_headers-1.0.3-py3-none-any.whl
  • Upload date:
  • Size: 60.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for spdx_headers-1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 b72478847e02d2d2ab7ce6ed58569d7ff8d919e7d1dcc21b9b9f8a27cf33f45c
MD5 d96e4424c2898c93a66bfcb61c37802f
BLAKE2b-256 bc53ee5a47f78c295c3b48b6bdfa21da71eaac1404c9b422b3e5b8f0b164ee03

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