Skip to main content

odcslint

ODCS v3 PyPI CI License: MIT

A fast, Rust-powered linter for Open Data Contract Standard (ODCS) contracts. Full documentation: feliblo.github.io/odcslint

  • Fast validation against the official ODCS schema
    • 40-1,800× faster than datacontract lint (see the benchmarks)
  • Custom business rules in simple YAML, with autofix
    • approved owners and known domains
    • column order: primary keys first, metadata columns last
    • naming conventions, required fields and tags
  • Automatic upgrades between ODCS versions with odcslint upgrade
    • converts breaking changes for you, such as team lists and quality rules
    • keeps your comments and formatting
    • --dry-run shows what would change first

Installation

uv
uv tool install odcslint     # as a standalone tool
uv add --dev odcslint        # as a dev dependency of your project
pip
pip install odcslint
Homebrew
brew install feliblo/tap/odcslint
Shell (macOS / Linux)
curl -LsSf https://github.com/feliblo/odcslint/releases/latest/download/odcslint-installer.sh | sh
PowerShell (Windows)
powershell -ExecutionPolicy Bypass -c "irm https://github.com/feliblo/odcslint/releases/latest/download/odcslint-installer.ps1 | iex"
prek / pre-commit
repos:
  - repo: https://github.com/feliblo/odcslint
    rev: v0.3.0
    hooks:
      - id: odcslint-fix   # or `odcslint` to only check
GitHub Action
- uses: feliblo/odcslint@v0.3.0
  with:
    paths: contracts/
From source
cargo install --git https://github.com/feliblo/odcslint

Quickstart

odcslint init           # write a starter odcslint.yml
odcslint check          # check every *.odcs.yaml below the current directory
odcslint check --fix    # apply fixes in place
odcslint upgrade        # move contracts to the newest ODCS version
$ odcslint check contracts/
contracts/orders.odcs.yaml
  13:17  error    allowed_owners   team member username `mallory` is not allowed; allowed values: alice, bob
  20:9   error    property_order   expected `order_id` at position 1 of `orders`, found `_loaded_at` [*]

contracts/payments.odcs.yaml
  6:1  error    schema  unexpected property `owner`

Found 3 errors and 0 warnings (2 files checked). 1 finding marked [*] can be fixed with `odcslint check --fix`.

Enable rules in odcslint.yml:

rules:
  - type: property_order          # primary keys first, metadata columns last (fixable)
  - type: allowed_owners          # only these people may own a contract
    values: [alice, bob]

See the rules and configuration docs for everything else.

Acknowledgements

odcslint stands on the work of the Bitol community and the LF AI & Data Foundation, who develop and maintain the Open Data Contract Standard in the open. Their JSON Schemas are embedded in odcslint, and their examples and negative tests make up much of its test suite. Thank you to everyone who contributes to the standard.

License

odcslint is released under the MIT license. The embedded ODCS JSON Schemas are © The Bitol Contributors and licensed under Apache-2.0 (see licenses/).

Metadata

Release files for odcslint 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for odcslint 0.3.0
File
odcslint-0.3.0-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details
odcslint-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl Python 3 none Linux glibc 2.17+ x86-64 Details
odcslint-0.3.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl Python 3 none Linux glibc 2.17+ ARM64 Details
odcslint-0.3.0-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details
odcslint-0.3.0-py3-none-macosx_10_12_x86_64.whl Python 3 none macOS 10.12+ x86-64 Details

Total release size: 16.9 MB

Release files / odcslint-0.3.0-py3-none-win_amd64.whl

Download URL odcslint-0.3.0-py3-none-win_amd64.whl
Size 3.5 MB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
d489dd0d4677aeb375c55a062504865b0eb946f7dedf882351ade81d706af1b1
BLAKE2b-256 checksum
How to use checksums
ae9c9275a4a7d03c770510989d582fd16d1c689f86c1dbbb4f9eb7edd36f8c28
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","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}

Release files / odcslint-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL odcslint-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 3.6 MB
Tags Linux glibc 2.17+ x86-64 Python 3
SHA-256 checksum
How to use checksums
12feee8c1c241fb3055c94ee6d8047de94e0037f52a36408b380bd53b9d5fe4e
BLAKE2b-256 checksum
How to use checksums
382d196362e43e973265a0a68de1380fecc55886eb7daf188206cca93cc48a62
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","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}

Release files / odcslint-0.3.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL odcslint-0.3.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 3.3 MB
Tags Linux glibc 2.17+ ARM64 Python 3
SHA-256 checksum
How to use checksums
e3b06c2883641810f0e9a62725a585e2e6d7a43324f82ea46b71d1f44e6c5602
BLAKE2b-256 checksum
How to use checksums
6efc17afc75a04388b0438558886507f5ca70849064805b2436761501bf418af
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","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}

Release files / odcslint-0.3.0-py3-none-macosx_11_0_arm64.whl

Download URL odcslint-0.3.0-py3-none-macosx_11_0_arm64.whl
Size 3.2 MB
Tags Python 3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
c3df241717bcee98303d9bc9042f8521471286d95d35a4f1254d43df4f22d606
BLAKE2b-256 checksum
How to use checksums
f4f1802f5a2694bcf671a6a9301e52229e07c3836d1843632e117a2db343ee00
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","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}

Release files / odcslint-0.3.0-py3-none-macosx_10_12_x86_64.whl

Download URL odcslint-0.3.0-py3-none-macosx_10_12_x86_64.whl
Size 3.4 MB
Tags Python 3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
1333d0c5a9b0b43f96e1081dd1eb5216db05c0eb6efe6450a98b846fbd14c4e5
BLAKE2b-256 checksum
How to use checksums
6d7a0cebd6cefb334ac6f5916c2155d57f5f85313beb71fd7d21ff391c2c110e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","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}

Security for odcslint 0.3.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page