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.1.0
    hooks:
      - id: odcslint-fix   # or `odcslint` to only check
GitHub Action
- uses: feliblo/odcslint@v0.1.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 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.1.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.1.0
File
odcslint-0.1.0-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details
odcslint-0.1.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl Python 3 none Linux glibc 2.17+ x86-64 Details
odcslint-0.1.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl Python 3 none Linux glibc 2.17+ ARM64 Details
odcslint-0.1.0-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details
odcslint-0.1.0-py3-none-macosx_10_12_x86_64.whl Python 3 none macOS 10.12+ x86-64 Details

Total release size: 16.4 MB

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

Download URL odcslint-0.1.0-py3-none-win_amd64.whl
Size 3.4 MB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
544116d20004b63db4994ac7b28e9c6f8e0c9d09e7cb05dd368fef7f53a0a253
BLAKE2b-256 checksum
How to use checksums
c6a55d642a566012c677c97c99968b8b70f42684f1c0be6a116211ca2e8db1b2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.3 {"installer":{"name":"uv","version":"0.13.3","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.1.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL odcslint-0.1.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 3.5 MB
Tags Linux glibc 2.17+ x86-64 Python 3
SHA-256 checksum
How to use checksums
eb85b992c1f1c67d3aa4181b597b758e601e8ff591ec8b3667febab6fb868509
BLAKE2b-256 checksum
How to use checksums
08db61064063389eb919e487dd314fc2837b9984821f864eec7b77e278a279df
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.3 {"installer":{"name":"uv","version":"0.13.3","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.1.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

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

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

Download URL odcslint-0.1.0-py3-none-macosx_10_12_x86_64.whl
Size 3.3 MB
Tags Python 3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
96b3f569014fe7cd452d985345e3d4e0b9c1df4e94a5cd9db4e52930bca4cc29
BLAKE2b-256 checksum
How to use checksums
cca93cb7fe66b79d4e26dc5cabecbc4533cb0515a8041f36186772ad7b7ae2ac
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.3 {"installer":{"name":"uv","version":"0.13.3","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.1.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