En esta prueba se realiza el proceso completo de validación, transformación y harvesting a partir de un archivo xlsx que contiene los metadatos pertenecientes al catálogo del Ministerio de Justicia.
Nota: Se trata de un catálogo conocido y originalmente válido en cuanto a su estructura y metadatos, al que se le han borrado los valores de la propiedad "dataset_title". Archivo utilizado: catalogo-justicia-con-error-datasets.xlsx
In [1]:
import arrow
import os, sys
sys.path.insert(0, os.path.abspath(".."))
from pydatajson import DataJson #lib y clase
from pydatajson.readers import read_catalog # lib, modulo ... metodo Lle el catalogo -json o xlsx o (local o url) dicc- y lo transforma en un diccionario de python
from pydatajson.writers import write_json_catalog
In [2]:
#completar con lo que corresponda
ORGANISMO = 'justicia'
catalogo_xlsx = os.path.join("archivos-tests", "excel-no-validos", "catalogo-justicia-con-error-datasets.xlsx")
In [3]:
#NO MODIFICAR
#Creo la estructura de directorios necesaria si no existe
if not os.path.isdir("archivos-generados"):
os.mkdir("archivos-generados")
for directorio in ["jsons", "reportes", "configuracion"]:
path = os.path.join("archivos-generados", directorio)
if not os.path.isdir(path):
os.mkdir(path)
# Declaro algunas variables de interés
HOY = arrow.now().format('YYYY-MM-DD-HH_mm')
catalogo_a_json = os.path.join("archivos-generados","jsons","catalogo-{}-{}.json".format(ORGANISMO, HOY))
reporte_datasets = os.path.join("archivos-generados", "reportes", "reporte-catalogo-{}-{}.xlsx".format(ORGANISMO, HOY))
archivo_config_sin_reporte = os.path.join("archivos-generados", "configuracion", "archivo-config_-{}-{}-sinr.csv".format(ORGANISMO, HOY))
archivo_config_con_reporte = os.path.join("archivos-generados", "configuracion", "archivo-config-{}-{}-conr.csv".format(ORGANISMO, HOY))
In [4]:
catalogo = read_catalog(catalogo_xlsx)
In [5]:
write_json_catalog(catalogo, catalogo_a_json)
##write_json_catalog(catalog, target_file) escribe un dicc a un archivo json
Instanciación de la clase DataJson
In [6]:
dj = DataJson()
Validación -V/F- del catálogo en json
In [7]:
dj.is_valid_catalog(catalogo)
# obtenemos FALSE
Out[7]:
Validación detallada del catálogo en json
In [8]:
dj.validate_catalog(catalogo)
# el mensaje de Error indica que "title" es una propiedad requerida
Out[8]:
En este caso debe hacerse el reporte del error al área correspondiente para que puedan completarse las omisiones. Recién luego, se estará en condiciones de seguir con el proceso.