Aller au contenu

Formats de sortie

--format est accepté par validate, read et rules list. Cinq formats sont supportés. Choisissez selon le consommateur de la sortie.

FormatDéfaut ?Couleurs TTY-awareSchéma stableIdéal pour
textUsage interactif.
jsonPipelines CI, diff.
csvTriage en tableur.
xmlIntégrations legacy.
htmlPartage avec partie prenante.

Lisible par un humain, coloré quand stdout est un TTY. Les couleurs ANSI sont désactivées automatiquement hors TTY ; forcez ou supprimez avec --force-color / --no-color.

Les anomalies streament inline (une par ligne), suivies d’un bloc de résumé. Chaque ligne :

[<severity>] <rule_id> — <message>[ — <file>:<line>][ — <field> = <value>]

Les segments optionnels sont omis quand la règle ne pointe pas un endroit précis.

[ERROR] fk_violation — stop_id "BAD_STOP" not found in stops.txt — stop_times.txt:14203 — stop_id = BAD_STOP
[WARNING] duplicate_route_short_name — two routes share short_name "747" — routes.txt:58 — route_short_name = 747
[INFO] missing_shape — trip has no shape_id — trips.txt:1029

Le bloc de résumé clôt la sortie :

===================================
Summary
===================================
45 Errors — 94912 Warnings — 177074 Infos
Status: FAIL

Avec -o, les anomalies vont dans le fichier et la console n’affiche que les barres de progression et le résumé.

Tabulaire. Les colonnes suivent l’ordre canonique de la spec GTFS (pour read) ou rule_id | severity | stage (pour rules list).

Stable, machine-readable. À utiliser en CI.

{
"errors": [
{
"rule_id": "fk_violation",
"section": "foreign_key",
"severity": "Error",
"message": "stop_id \"BAD_STOP\" not found in stops.txt",
"file_name": "stop_times.txt",
"line_number": 14203,
"field_name": "stop_id",
"value": "BAD_STOP"
}
],
"summary": {
"error_count": 45,
"warning_count": 94912,
"info_count": 177074,
"passed": false
}
}

Schéma d’une anomalie (champs dans errors) :

ChampTypeNotes
rule_idstringIdentifiant de règle enregistré. Voir règles de validation.
sectionstringSection de spec à laquelle la règle appartient (ex. foreign_key).
severity"Error" | "Warning" | "Info"Capitalisé.
messagestringDescription humaine.
file_namestring | nullFichier GTFS pointé. null pour les anomalies au niveau flux.
line_numberinteger | null1-based, en-tête inclus.
field_namestring | nullColonne mise en cause.
valuestring | nullValeur réelle ayant déclenché la règle.

Schéma summary :

ChampType
error_countinteger
warning_countinteger
info_countinteger
passedboolean

passed est true ssi error_count == 0 après filtrage --min-severity. Le code de retour suit la même règle.

read produit un tableau d’objets lignes avec clés = noms de colonnes. rules list produit un tableau d’objets {rule_id, severity, stage} encapsulé dans {count, rules}.

Table plate, une ligne par anomalie (pour validate) ou par enregistrement (pour read). Inclut toujours la ligne d’en-tête.

rule_id,section,severity,message,file_name,line_number,field_name,value
fk_violation,foreign_key,Error,"stop_id ""BAD_STOP"" not found in stops.txt",stop_times.txt,14203,stop_id,BAD_STOP

Les cellules vides (pas null — chaîne vide) sont utilisées quand un champ n’est pas renseigné.

read reprend l’ordre canonique des colonnes de la cible. rules list produit rule_id,severity,stage.

XML standard avec racine <validation_report>. La structure reflète le schéma JSON — mêmes noms de champs, rendus en éléments plutôt qu’en clés.

<?xml version="1.0" encoding="UTF-8"?>
<validation_report>
<summary>
<error_count>45</error_count>
<warning_count>94912</warning_count>
<info_count>177074</info_count>
<passed>false</passed>
</summary>
<error>
<rule_id>fk_violation</rule_id>
<section>foreign_key</section>
<severity>Error</severity>
<message>stop_id "BAD_STOP" not found in stops.txt</message>
<file_name>stop_times.txt</file_name>
<line_number>14203</line_number>
<field_name>stop_id</field_name>
<value>BAD_STOP</value>
</error>
</validation_report>

rules list produit <rules> en racine avec un <rule> par entrée.

Rapport auto-contenu. CSS et JavaScript sont inlinés ; le fichier s’ouvre par double-clic dans n’importe quel navigateur — pas de serveur requis. À utiliser pour partager un rapport avec quelqu’un qui ne vit pas dans un terminal.

Fenêtre de terminal
gapline validate -f gtfs.zip --format html -o report.html

Le HTML inclut les compteurs, un toggle de regroupement par fichier et par règle, et des badges colorés par sévérité. Les gros rapports restent navigables — la table est virtualisée côté client.

Fenêtre de terminal
gapline validate -f gtfs.zip --format json -o report.json
jq '.summary.error_count' report.json

text est le seul format avec couleurs. Contrôlez la sortie couleur avec :

  • --no-color — toujours désactivé, même en TTY.
  • --force-color — toujours activé, même en pipe.
  • Section [output] de gapline.tomlno_color, force_color (les flags ci-dessus gagnent).

Voir flags globaux.