Skip to content

Commit

Permalink
Modifico validate_catalog para que no dependa de ErrorTree
Browse files Browse the repository at this point in the history
  • Loading branch information
capitantoto committed Dec 12, 2016
1 parent e19fbc9 commit 7d239ef
Showing 1 changed file with 37 additions and 38 deletions.
75 changes: 37 additions & 38 deletions pydatajson/pydatajson.py
Original file line number Diff line number Diff line change
Expand Up @@ -164,52 +164,51 @@ def validate_catalog(self, datajson_path):
"""
datajson = self._json_to_dict(datajson_path)

# Genero árbol de errores para explorarlo
errors_iterator = self.validator.iter_errors(datajson)
error_tree = jsonschema.ErrorTree(errors_iterator)
# La respuesta por default se devuelve si no hay errores
default_response = {
"status": "OK",
"error": {
"catalog": {
"status": "OK",
"title": datajson.get("title")
},
"dataset": [
{
"status": "OK",
"title": dataset.get("title")
} for dataset in datajson["dataset"]
] if ("dataset" in datajson and
isinstance(datajson["dataset"], list)) else None
}
}

global_status = "OK" if error_tree.total_errors == 0 else "ERROR"
def _update_response(validation_error, response):
"""Actualiza la respuesta por default acorde a un error de
validación."""
new_response = response

catalog_status = "OK" if (error_tree.errors == {} and
"publisher" not in error_tree) else "ERROR"
# El status del catálogo entero será ERROR
response["status"] = "ERROR"

def _dataset_result(idx, dataset):
"""Dado un dataset y su índice en el data.json, devuelve una
diccionario con el resultado de su validación. """
if "dataset" not in error_tree:
result = {
"status": "OK",
"title": dataset.get("title")
}
path = validation_error.path

if len(path) >= 2 and path[0] == "dataset":
# El error está a nivel de un dataset particular o inferior
response["error"]["dataset"][path[1]]["status"] = "ERROR"
else:
dataset_total_errors = error_tree["dataset"][idx].total_errors
result = {
"status": "OK" if dataset_total_errors == 0 else "ERROR",
"title": dataset.get("title")
}
# El error está a nivel de catálogo
response["error"]["catalog"]["status"] = "ERROR"

return result
return new_response

if "dataset" in datajson:
datasets_results = [
_dataset_result(i, ds) for i, ds in
enumerate(datajson["dataset"])
]
else:
datasets_results = None
# Genero la lista de errores en la instancia a validar
errors_iterator = self.validator.iter_errors(datajson)

res = {
"status": global_status,
"error": {
"catalog": {
"status": catalog_status,
"title": datajson.get("title")
},
"dataset": datasets_results
}
}
final_response = default_response
for error in errors_iterator:
final_response = _update_response(error, final_response)

return res
return final_response


def main():
Expand Down

0 comments on commit 7d239ef

Please sign in to comment.