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

FileDateSHA-256Size
eotl-check-0.4.2.tar.gz2026-08-2820d7695a86d7…3.8 KB
eotl-check-0.4.1.tar.gz2026-07-0273a054b6c6dc…3.7 KB
eotl-check-0.3.9.tar.gz2026-04-1521c4ae7cb05e…3.7 KB

SHA256SUMS

Changes in 0.4.2