Closed dennisangemi closed 1 year ago
Ciao @dennisangemi,
Io invece sono interessato ad una validazione formale della struttura del package: ci sono errori di sintassi? ci sono
values
che non possono essere associati a determinatekeys
(violando gli standard)?
se lanci una validazione, usando un file yaml con degli errori formali, avrai restituito uno o più errori a schermo.
Quindi diciamo che se riesci ad avere una validazione di uno o più file di un datapackage, vuol dire che è formalmente valido. Prova a rompere la forma di un tuo file yaml. Detto questo, magari c'è un modo diretto, ma non lo conosco.
Ho provato a lanciare questo
frictionless validate datapackage.yaml --pick-errors "metadata-error" --skip-errors "resource-error" --json
ma ottengo ancora validazione dei dati.
Sì, sono tutte opzioni per validare i dati.
mhh grazie @aborruso in effetti rompendo un package si ottiene un errore di tipo package-error
. Indago ancora un po' per capire come selezionare solo questo tipo di errori evitando la validazione dei dati (potrei filtrarli in jq ma solo a seguito della validazione completa che utilizzerebbe risorse inutili).
Sarei interessato ad una cosa del genere per evitare che frictionless2md provi a convertire package non validi
mhh grazie @aborruso in effetti rompendo un package si ottiene un errore di tipo
package-error
.
E allora potrai usare --pick-errors "package-error"
Ho notato che lanciando
frictionless validate datapackage.yaml --pick-errors "package-error"
Confrontando gli output json di un package valido e uno non valido mi rendo conto del fatto che
task
non sarà vuoto
{
"valid": false,
"stats": {
"tasks": 4,
"warnings": 0,
"errors": 3,
"seconds": 0.022
},
"warnings": [],
"errors": [],
"tasks": [
{
"valid": false,
"name": "contenuti",
"type": "table",
"place": "data/contenuti.csv",
"labels": [],
"stats": {
"warnings": 0,
"errors": 1,
"seconds": 0.003
}
}
]
}
tasks
è vuoto
{
"valid": false,
"stats": {
"tasks": 0,
"warnings": 0,
"errors": 1,
"seconds": 0.075
},
"warnings": [],
"errors": [
{
"type": "package-error",
"title": "Package Error",
"description": "A validation cannot be processed.",
"message": "The data package has an error: cannot retrieve metadata \"datapackage.yaml\" because \"mapping values are not allowed here\n in \"<file>\", line 156, column 9\"",
"tags": [],
"note": "cannot retrieve metadata \"datapackage.yaml\" because \"mapping values are not allowed here\n in \"<file>\", line 156, column 9\""
}
],
"tasks": []
}
Quindi potrei usare l'emptiness dell'array tasks come discriminante.
Per verificare se l'array tasks
ha elementi, posso lanciare
frictionless validate datapackage.yaml --pick-errors "package-error" --json | jq '.tasks | has(0)'
che restituisce
false
nel caso in cui l'array è vuoto e quindi il package non è validotrue
nel caso in cui l'array non è vuoto e quindi il package è validoResta il fatto che se il package è valido allora la nostra macchinina utilizzerà un po' delle sue risorse per validare inutilmente i dati
Ciao @dennisangemi
Resta il fatto che se il package è valido allora la nostra macchinina utilizzerà un po' delle sue risorse per validare inutilmente i dati
ripeto su questo non ti so dire. Tieni conto che puoi generare un file temporaneo di una riga e validare solo quello per validare il package.
Oltre a jq e ai task, puoi usare quasi sicuramente di codici di uscita del programma. Ma testalo.
Uno script bash restituisce sempre un codice del programma. Se è 0
è ok, altrimenti non va bene.
Prova a lanciare frictionless validate datapackage.yaml --pick-errors "package-error"
a partire da un file yaml scorretto.
E poi lancia echo "$?"
per avere il codice di errore.
Dovrebbe essere pari a 1
.
I codici di uscita sono il modo principe per gestire queste cose. Ma anche il tuo jq way sembra ok.
Dovrebbe essere pari a
1
.
Grazie @aborruso. Solo che sto notando che "$?"
è pari a 1 anche quando frictionless validate datapackage.yaml --pick-errors "package-error"
viene eseguito su un package valido ma con dati non validi
Grazie @aborruso. Solo che sto notando che
"$?"
è pari a 1 anche quandofrictionless validate datapackage.yaml --pick-errors "package-error"
viene eseguito su un package valido ma con dati non validi
Per questo ti dicevo di testare, perché non è detto che ci siano exit code distinti. Ok, vai in quell'altra modalità
Ricetta qui https://tansignari.opendatasicilia.it/ricette/utilities/frictionless_validare_struttura_datapackage/
Grazie capo! @aborruso
Che bella ricetta!
Sera! Mi chiedevo se ci fosse un modo per validare un datapackage di frictionless.
Se lancio
frictionless validerà i dati che sono descritti nel package. Io invece sono interessato ad una validazione formale della struttura del package: ci sono errori di sintassi? ci sono
values
che non possono essere associati a determinatekeys
(violando gli standard)?Da (
frictionless validate --help
) ho visto che si possono usare i flag--skip-errors
e--pick-errors
. Io sarei interessato a skippare tutti gli errori relativi alle risorse descritte ma vorrei invece ottenere gli errori legati ai metadati.Ho provato a lanciare questo
ma ottengo ancora validazione dei dati.
Qui documentazione relativa agli errori. Ho letto che ci sono una marea di errori legati ai dati: devo skipparli uno ad uno? Non c'è un modo ad esempio per fare una cosa del tipo "pick only metadata errors"?