Validates CSV files before import processing.
Performs early validation to fail fast with meaningful errors rather than discovering issues mid-import.
Validation Checks
- File exists and readable - Basic filesystem check
- CSV parseable - File is valid CSV format
- Required columns present - Checks for Handle, Title, Variant Price by default
- Warning detection - Non-blocking issues like empty rows
Examples
# Basic validation with default required columns
case CSVValidator.validate_file("/path/to/products.csv") do
:ok -> IO.puts("File is valid")
{:error, reason} -> IO.puts("Validation failed: #{reason}")
end
# Validation with custom required columns
CSVValidator.validate_headers("/path/to/products.csv", ["Handle", "Title", "Price"])
# Full validation report
report = CSVValidator.get_validation_report("/path/to/products.csv")
# => %{
# valid: true,
# file_path: "/path/to/products.csv",
# headers: ["Handle", "Title", ...],
# row_count: 1234,
# warnings: ["Some rows have empty Handle values"]
# }
Summary
Functions
Extracts headers from a CSV file.
Returns a comprehensive validation report.
Validates that a file exists, is readable, and has valid CSV format.
Extracts and validates CSV headers against required columns.
Extracts and validates CSV headers against custom required columns.
Functions
Extracts headers from a CSV file.
Returns {:ok, headers} or {:error, reason}.
Returns a comprehensive validation report.
Report Structure
%{
valid: boolean,
file_path: string,
file_size: integer,
headers: list | nil,
row_count: integer | nil,
missing_columns: list,
warnings: list,
error: string | nil
}
Validates that a file exists, is readable, and has valid CSV format.
Returns :ok or {:error, reason}.
Extracts and validates CSV headers against required columns.
Uses default required columns: ["Handle", "Title", "Variant Price"]
Returns {:ok, headers} or {:error, reason}.
Extracts and validates CSV headers against custom required columns.
Returns {:ok, headers} or {:error, {:missing_columns, missing}}.