Metadata-Version: 2.4
Name: kontra
Version: 0.5.2
Summary: Developer-first data quality engine
Author: Saevarlb
License: Apache-2.0
Project-URL: Homepage, https://github.com/Saevarl/Kontra
Project-URL: Documentation, https://github.com/Saevarl/Kontra#readme
Project-URL: Repository, https://github.com/Saevarl/Kontra
Project-URL: Issues, https://github.com/Saevarl/Kontra/issues
Keywords: data-quality,validation,data-contracts,polars,duckdb
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
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 :: Database
Classifier: Topic :: Software Development :: Quality Assurance
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: polars>=0.20.0
Requires-Dist: duckdb>=0.9.0
Requires-Dist: pydantic>=2.0.0
Requires-Dist: typer>=0.9.0
Requires-Dist: rich>=13.0.0
Requires-Dist: pyarrow>=14.0.0
Requires-Dist: pyyaml>=6.0.0
Requires-Dist: sqlglot>=20.0.0
Provides-Extra: s3
Requires-Dist: s3fs>=2024.6.0; extra == "s3"
Provides-Extra: postgres
Requires-Dist: psycopg[binary]>=3.0.0; extra == "postgres"
Provides-Extra: sqlserver
Requires-Dist: pymssql>=2.2.0; extra == "sqlserver"
Provides-Extra: all
Requires-Dist: s3fs>=2024.6.0; extra == "all"
Requires-Dist: psycopg[binary]>=3.0.0; extra == "all"
Requires-Dist: pymssql>=2.2.0; extra == "all"
Provides-Extra: dev
Requires-Dist: pytest>=8.0.0; extra == "dev"
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
Requires-Dist: ruff>=0.1.0; extra == "dev"
Dynamic: license-file

# Kontra

**Data quality validation for developers.**

Kontra validates datasets against declarative contracts. Define rules in YAML, run them against Parquet, CSV, PostgreSQL, or SQL Server. Get violation counts back.

```bash
pip install kontra
```

## 30-Second Example

```bash
# Profile your data
kontra profile data.parquet

# Draft a starting contract
kontra profile data.parquet --draft > contract.yml

# Validate
kontra validate contract.yml
```

Output:
```
PASSED - data.parquet (4 rules)
  COL:user_id:not_null      ✓
  COL:email:unique          ✓
  COL:status:allowed_values ✓
  COL:age:range             ✓
```

## What You Write

```yaml
# contract.yml
name: users_quality
datasource: data/users.parquet

rules:
  - name: not_null
    params: { column: user_id }

  - name: unique
    params: { column: email }

  - name: allowed_values
    params:
      column: status
      values: [active, inactive, pending]
```

## What You Get

- **18 built-in rules**: not_null, unique, range, regex, contains, length, freshness, and more
- **Fast execution**: Metadata analysis and SQL pushdown before loading data
- **Multiple sources**: Parquet, CSV, PostgreSQL, SQL Server, S3
- **Python API**: Use as a library with `kontra.validate(df, rules=[...])`
- **State tracking**: Compare runs over time with `kontra diff`

## Documentation

| Doc | Audience |
|-----|----------|
| [Getting Started](docs/getting-started.md) | New users |
| [Python API](docs/python-api.md) | Library users |
| [Rules Reference](docs/reference/rules.md) | Everyone |
| [Configuration](docs/reference/config.md) | Project setup |
| [Advanced Topics](docs/advanced/) | Agents, state, execution model |
| [Architecture](docs/reference/architecture.md) | Contributors |

## License

MIT
