Caso de uso - Validación, transformación y harvesting con el catálogo dev

Caso 1: catálogo válido

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 válido en cuanto a su estructura y metadatos. Archivo utilizado: catalogo-justicia.xlsx

Setup

Importación de metodos y clases


In [13]:
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

Declaración de variables y paths


In [14]:
#completar con lo que corresponda
ORGANISMO = 'justicia'
catalogo_xlsx = os.path.join("archivos-tests", "excel-validos", "catalogo-justicia.xlsx")

In [15]:
#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))

Validación del archivo xlsx y transformación a json

Validación del catálogo en xlsx


In [16]:
#catalogo = read_catalog(catalogo_xlsx)
# En el caso que quiera trabajarse con un archivo remoto:
catalogo = read_catalog("http://186.33.211.253/data.json")

Transformación del catálogo, de xlsx a json


In [17]:
write_json_catalog(catalogo, catalogo_a_json)

##write_json_catalog(catalog, target_file)  escrie un dicc a un archivo json

Validación del catalogo en json y harvesting

Validación del catálogo en json

Instanciación de la clase DataJson


In [18]:
dj = DataJson()

Validación -V/F- del catálogo en json


In [19]:
dj.is_valid_catalog(catalogo)


Out[19]:
False

Validación detallada del catálogo en json


In [20]:
dj.validate_catalog(catalogo)


Out[20]:
{u'error': {u'catalog': {u'errors': [],
   u'status': u'OK',
   u'title': u'Datos Argentina'},
  u'dataset': [{u'errors': [{u'error_code': 1,
      u'instance': None,
      u'message': "u'superTheme' is a required property",
      u'path': [u'dataset', 0],
      u'validator': u'required',
      u'validator_value': [u'title',
       u'description',
       u'publisher',
       u'superTheme',
       u'distribution',
       u'accrualPeriodicity',
       u'issued']}],
    u'status': u'ERROR',
    u'title': u'Base de datos legislativos Infoleg'},
   {u'errors': [{u'error_code': 1,
      u'instance': None,
      u'message': "u'superTheme' is a required property",
      u'path': [u'dataset', 1],
      u'validator': u'required',
      u'validator_value': [u'title',
       u'description',
       u'publisher',
       u'superTheme',
       u'distribution',
       u'accrualPeriodicity',
       u'issued']}],
    u'status': u'ERROR',
    u'title': u'Entidades constituidas en la Inspecci\xf3n General de Justicia'},
   {u'errors': [{u'error_code': 1,
      u'instance': None,
      u'message': "u'superTheme' is a required property",
      u'path': [u'dataset', 2],
      u'validator': u'required',
      u'validator_value': [u'title',
       u'description',
       u'publisher',
       u'superTheme',
       u'distribution',
       u'accrualPeriodicity',
       u'issued']}],
    u'status': u'ERROR',
    u'title': u'Declaraci\xf3n Jurada Patrimonial Integral de car\xe1cter p\xfablico'},
   {u'errors': [{u'error_code': 1,
      u'instance': None,
      u'message': "u'superTheme' is a required property",
      u'path': [u'dataset', 3],
      u'validator': u'required',
      u'validator_value': [u'title',
       u'description',
       u'publisher',
       u'superTheme',
       u'distribution',
       u'accrualPeriodicity',
       u'issued']}],
    u'status': u'ERROR',
    u'title': u'Registro, Sistematizaci\xf3n y Seguimiento de Hechos de Violencia Institucional'},
   {u'errors': [{u'error_code': 1,
      u'instance': None,
      u'message': "u'superTheme' is a required property",
      u'path': [u'dataset', 4],
      u'validator': u'required',
      u'validator_value': [u'title',
       u'description',
       u'publisher',
       u'superTheme',
       u'distribution',
       u'accrualPeriodicity',
       u'issued']}],
    u'status': u'ERROR',
    u'title': u'Magistrados de la Justicia Federal y de la Justicia Nacional'},
   {u'errors': [{u'error_code': 1,
      u'instance': None,
      u'message': "u'superTheme' is a required property",
      u'path': [u'dataset', 5],
      u'validator': u'required',
      u'validator_value': [u'title',
       u'description',
       u'publisher',
       u'superTheme',
       u'distribution',
       u'accrualPeriodicity',
       u'issued']}],
    u'status': u'ERROR',
    u'title': u'Sistema de Consulta Nacional de Rebeld\xedas y Capturas - Co.Na.R.C.'},
   {u'errors': [{u'error_code': 1,
      u'instance': None,
      u'message': "u'superTheme' is a required property",
      u'path': [u'dataset', 6],
      u'validator': u'required',
      u'validator_value': [u'title',
       u'description',
       u'publisher',
       u'superTheme',
       u'distribution',
       u'accrualPeriodicity',
       u'issued']}],
    u'status': u'ERROR',
    u'title': u'Solicitudes de Condici\xf3n de Leg\xedtimo Usuario de Armas de Fuego'},
   {u'errors': [{u'error_code': 1,
      u'instance': None,
      u'message': "u'superTheme' is a required property",
      u'path': [u'dataset', 7],
      u'validator': u'required',
      u'validator_value': [u'title',
       u'description',
       u'publisher',
       u'superTheme',
       u'distribution',
       u'accrualPeriodicity',
       u'issued']}],
    u'status': u'ERROR',
    u'title': u'Estad\xedstica de mediaciones prejudiciales y judiciales'},
   {u'errors': [{u'error_code': 1,
      u'instance': None,
      u'message': "u'superTheme' is a required property",
      u'path': [u'dataset', 8],
      u'validator': u'required',
      u'validator_value': [u'title',
       u'description',
       u'publisher',
       u'superTheme',
       u'distribution',
       u'accrualPeriodicity',
       u'issued']}],
    u'status': u'ERROR',
    u'title': u'Solicitudes de Autorizaci\xf3n de Portaci\xf3n de Armas de Fuego'},
   {u'errors': [{u'error_code': 1,
      u'instance': None,
      u'message': "u'superTheme' is a required property",
      u'path': [u'dataset', 9],
      u'validator': u'required',
      u'validator_value': [u'title',
       u'description',
       u'publisher',
       u'superTheme',
       u'distribution',
       u'accrualPeriodicity',
       u'issued']}],
    u'status': u'ERROR',
    u'title': u'Listado de Registros Seccionales de la Direcci\xf3n Nacional de Registros Nacionales de la Propiedad Automotor y Cr\xe9ditos Prendarios'},
   {u'errors': [{u'error_code': 1,
      u'instance': None,
      u'message': "u'superTheme' is a required property",
      u'path': [u'dataset', 10],
      u'validator': u'required',
      u'validator_value': [u'title',
       u'description',
       u'publisher',
       u'superTheme',
       u'distribution',
       u'accrualPeriodicity',
       u'issued']}],
    u'status': u'ERROR',
    u'title': u'Estad\xedstica de Inscripciones Iniciales de Automotores y Motoveh\xedculos'},
   {u'errors': [{u'error_code': 1,
      u'instance': None,
      u'message': "u'superTheme' is a required property",
      u'path': [u'dataset', 11],
      u'validator': u'required',
      u'validator_value': [u'title',
       u'description',
       u'publisher',
       u'superTheme',
       u'distribution',
       u'accrualPeriodicity',
       u'issued']}],
    u'status': u'ERROR',
    u'title': u'Internos del Servicio Penitenciario Federal - SPF'},
   {u'errors': [{u'error_code': 1,
      u'instance': None,
      u'message': "u'superTheme' is a required property",
      u'path': [u'dataset', 12],
      u'validator': u'required',
      u'validator_value': [u'title',
       u'description',
       u'publisher',
       u'superTheme',
       u'distribution',
       u'accrualPeriodicity',
       u'issued']}],
    u'status': u'ERROR',
    u'title': u'Sistema Nacional de Estad\xedsticas sobre Ejecuci\xf3n de la Pena \u2013 SNEEP'},
   {u'errors': [{u'error_code': 1,
      u'instance': None,
      u'message': "u'superTheme' is a required property",
      u'path': [u'dataset', 13],
      u'validator': u'required',
      u'validator_value': [u'title',
       u'description',
       u'publisher',
       u'superTheme',
       u'distribution',
       u'accrualPeriodicity',
       u'issued']}],
    u'status': u'ERROR',
    u'title': u'Registro Unificado de V\xedctimas del Terrorismo de Estado -RUVTE-'},
   {u'errors': [{u'error_code': 1,
      u'instance': None,
      u'message': "u'superTheme' is a required property",
      u'path': [u'dataset', 14],
      u'validator': u'required',
      u'validator_value': [u'title',
       u'description',
       u'publisher',
       u'superTheme',
       u'distribution',
       u'accrualPeriodicity',
       u'issued']}],
    u'status': u'ERROR',
    u'title': u'Registro, Sistematizaci\xf3n y Seguimiento de Femicidios y Homicidios Agravados por el G\xe9nero'},
   {u'errors': [{u'error_code': 1,
      u'instance': None,
      u'message': "u'superTheme' is a required property",
      u'path': [u'dataset', 15],
      u'validator': u'required',
      u'validator_value': [u'title',
       u'description',
       u'publisher',
       u'superTheme',
       u'distribution',
       u'accrualPeriodicity',
       u'issued']}],
    u'status': u'ERROR',
    u'title': u'Centros de Acceso a la Justicia -CAJ-'}]},
 u'status': u'ERROR'}

Harvesting

Generación del archivo de reporte de datasets


In [18]:
dj.generate_datasets_report(catalogo, harvest='valid',export_path=reporte_datasets)
# proceso el repote, 0 y 1s

Generación del archivo de configuración para el harvester


In [ ]:
#  usando el reporte
dj.generate_harvester_config(harvest='report', report=reporte_datasets, export_path=archivo_config_con_reporte)

In [ ]:
# sin usar el reporte
dj.generate_harvester_config(catalogs=catalogo, harvest='valid', export_path=archivo_config_sin_reporte)
#(catalogs=None, harvest=u'valid', report=None, export_path=None)

In [ ]: