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-3,200× 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

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.2.0
    hooks:
      - id: odcslint-fix   # or `odcslint` to only check
GitHub Action
- uses: feliblo/odcslint@v0.2.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    approved_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_values
    field: team.members.username
    role: owner
    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.2.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.2.0
File
odcslint-0.2.0-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details
odcslint-0.2.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl Python 3 none Linux glibc 2.17+ x86-64 Details
odcslint-0.2.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl Python 3 none Linux glibc 2.17+ ARM64 Details
odcslint-0.2.0-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details
odcslint-0.2.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.2.0-py3-none-win_amd64.whl

Download URL odcslint-0.2.0-py3-none-win_amd64.whl
Size 3.5 MB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
ca5569948972de0233deb442ef9be2a0d656dd63e0f00f0c5541c34e67427fb1
BLAKE2b-256 checksum
How to use checksums
b8f4935afa4f9ab4e4b898a74d785cfc8915c225944d962f708ead8c7c19e37d
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.2.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL odcslint-0.2.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
8e9c9eb3e373bda7c8fc47fdd22340a178db7a73b1aaaa080b94b0260affa1b6
BLAKE2b-256 checksum
How to use checksums
bba661781815132549f6420f0d9f0100b17dc373f096320b14602bbec085aceb
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.2.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL odcslint-0.2.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
7efb19599ead904b21e243289abf814c9f2b45afb608e5279dd3ee4dd72d457f
BLAKE2b-256 checksum
How to use checksums
4de4dc47a5e23c5f8ace231d7abfbc4a96766aa2f7e4fa18ea821d198b75aeba
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.2.0-py3-none-macosx_11_0_arm64.whl

Download URL odcslint-0.2.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
f7dcb3d887b3fab01fe5847d8985d90fbb831c5478d084ef9e57cc8f5fcdd6c4
BLAKE2b-256 checksum
How to use checksums
d2a326dedc7ae728055a23240fffa1b77e502daa65dc8411cf305638974ec359
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.2.0-py3-none-macosx_10_12_x86_64.whl

Download URL odcslint-0.2.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
c3e845dd27d8017c934c64ad86747ac7e334213ea0465ec6660b6b3f6e5b061e
BLAKE2b-256 checksum
How to use checksums
ebe440e9d93b8dbfd184f93afe0da3a25f316929274d1602541aa0d02252028a
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.2.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