<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Caso de uso 1 - Validación, transformación y harvesting con el catálogo del Ministerio de Justicia
Caso 1
Step1:  Declaración de variables y paths
Step2:  Validación del archivo xlsx y transformación a json
Validación del catálogo en xlsx
Step3:  Transformación del catálogo, de xlsx a json
Step4:  Validación del catalogo en json y harvesting
Validación del catálogo en json
Instanciación de la clase DataJson
Step5:  Validación -V/F- del catálogo en json
Step6:  Validación detallada del catálogo en json
Step7:  Harvesting
Generación del archivo de reporte de datasets
Step8:  Generación del archivo de configuración para el harvester
<ASSISTANT_TASK:>
Python Code:
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
Explanation: Caso de uso 1 - Validación, transformación y harvesting con el catálogo del Ministerio de Justicia
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
End of explanation
#completar con lo que corresponda
ORGANISMO = 'justicia'
catalogo_xlsx = os.path.join("archivos-tests", "excel-validos", "catalogo-justicia.xlsx")
#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))
Explanation: Declaración de variables y paths
End of explanation
catalogo = read_catalog(catalogo_xlsx)
# En el caso que quiera trabajarse con un archivo remoto:
#catalogo = read_catalog("https://raw.githubusercontent.com/datosgobar/pydatajson/master/tests/samples/catalogo_justicia.json")
Explanation: Validación del archivo xlsx y transformación a json
Validación del catálogo en xlsx
End of explanation
write_json_catalog(catalogo, catalogo_a_json)
##write_json_catalog(catalog, target_file)  escrie un dicc a un archivo json
Explanation: Transformación del catálogo, de xlsx a json
End of explanation
dj = DataJson()
Explanation: Validación del catalogo en json y harvesting
Validación del catálogo en json
Instanciación de la clase DataJson
End of explanation
dj.is_valid_catalog(catalogo)
Explanation: Validación -V/F- del catálogo en json
End of explanation
dj.validate_catalog(catalogo)
Explanation: Validación detallada del catálogo en json
End of explanation
dj.generate_datasets_report(catalogo, harvest='valid',export_path=reporte_datasets)
# proceso el repote, 0 y 1s
Explanation: Harvesting
Generación del archivo de reporte de datasets
End of explanation
#  usando el reporte
dj.generate_harvester_config(harvest='report', report=reporte_datasets, export_path=archivo_config_con_reporte)
# 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)
Explanation: Generación del archivo de configuración para el harvester
End of explanation
<END_TASK>