eotl-check
Validate a CSV file against a small JSON schema before it lands anywhere that matters. One file, Python standard library only, MIT licensed.
$ eotl-check orders.schema.json orders.csv
orders.csv:4: [order_id] duplicate value '1042'
orders.csv:5: [amount] expected float, got 'n/a'
orders.csv:6: [customer] required value is empty
FAIL: 5 rows checked, 3 errors
It checks the header, column types (str, int, float,
date, datetime, bool), required fields, enum,
min/max and unique columns. The exit code is 0 for a valid
file, 1 for an invalid one and 2 for usage errors, so it drops straight into a cron job or a CI step:
eotl-check --quiet schema.json "$f" || mv "$f" rejected/
Schema
{
"columns": [
{"name": "order_id", "type": "int", "required": true, "unique": true},
{"name": "amount", "type": "float", "required": true, "min": 0},
{"name": "currency", "type": "str", "enum": ["EUR", "GBP", "USD"]},
{"name": "created", "type": "date", "required": true}
],
"allow_extra_columns": false
}
Install
Requires Python 3.9 or newer. No dependencies.
curl -LO https://eotling.duckdns.org/tools/releases/eotl-check-0.4.2.tar.gz
sha256sum -c --ignore-missing <(curl -s https://eotling.duckdns.org/tools/releases/SHA256SUMS)
tar xzf eotl-check-0.4.2.tar.gz
install -m 755 eotl-check-0.4.2/eotl-check ~/.local/bin/
Releases
| File | Date | SHA-256 | Size |
|---|---|---|---|
| eotl-check-0.4.2.tar.gz | 2026-08-28 | 20d7695a86d7… | 3.8 KB |
| eotl-check-0.4.1.tar.gz | 2026-07-02 | 73a054b6c6dc… | 3.7 KB |
| eotl-check-0.3.9.tar.gz | 2026-04-15 | 21c4ae7cb05e… | 3.7 KB |
Changes in 0.4.2
- Report rows with more fields than the header instead of silently ignoring them.
--quietnow still prints the summary line.