pydatajson

Documentaci贸n de pydatajson: librer铆a con funcionalidades para gestionar los metadatos de cat谩logos de datos abiertos que cumplan con el Perfil Nacional de Metadatos. Pydatajson es parte del Paquete de Apertura de Datos.

Pod茅s colaborar cargando un nuevo issue, o respondiendo a un issue ya existente. Lo mismo te invitamos a hacer en el Paquete de Apertura de Datos.

Indice

pydatajson

Coverage Status Build Status PyPI Documentation Status

Paquete en python con herramientas para manipular y validar metadatos de cat谩logos de datos.

Este README cubre los casos de uso m谩s comunes para la librer铆a, junto con ejemplos de c贸digo, pero sin mayores explicaciones. Para una versi贸n m谩s detallada de los comportamientos, revise la documentaci贸n oficial o el Manual de Uso de la librer铆a.

Instalaci贸n

  • Producci贸n: Desde cualquier parte
$ pip install pydatajson
  • Desarrollo: Clonar este repositorio, y desde su ra铆z, ejecutar:
$ pip install -e .

A partir de la versi贸n 0.2.x (Febrero 2017), la funcionalidad del paquete se mantendr谩 fundamentalmente estable hasta futuro aviso. De todas maneras, si piensa utilizar esta librer铆a en producci贸n, le sugerimos fijar la versi贸n que emplea en un archivo requirements.txt.

Usos

La librer铆a cuenta con funciones para cuatro objetivos principales:

  • validaci贸n de metadatos de cat谩logos y los datasets,
  • generaci贸n de reportes sobre el contenido y la validez de los metadatos de cat谩logos y datasets,
  • transformaci贸n de archivos de metadatos al formato est谩ndar (JSON), y
  • generaci贸n de indicadores de monitoreo de cat谩logos y sus datasets.

A continuaci贸n se proveen ejemplos de cada uno de estas acciones. Si desea analizar un flujo de trabajo m谩s completo, refi茅rase a los Jupyter Notebook de samples/

Setup

DataJson utiliza un esquema default que cumple con el perfil de metadatos recomendado en la Gu铆a para el uso y la publicaci贸n de metadatos (v0.1) del Paquete de Apertura de Datos.

from pydatajson import DataJson

dj = DataJson()

Si se desea utilizar un esquema alternativo, por favor, consulte la secci贸n 芦Uso > Setup禄 del manual oficial, o la documentaci贸n oficial.

Validaci贸n de metadatos de cat谩logos
  • Si se desea un resultado sencillo (V o F) sobre la validez de la estructura del cat谩logo, se utilizar谩 is_valid_catalog(catalog).
  • Si se desea un mensaje de error detallado, se utilizar谩 validate_catalog(catalog).

Por conveniencia, la carpeta tests/samples/ contiene varios ejemplos de data.json bien y mal formados con distintos tipos de errores.

Archivo data.json local
from pydatajson import DataJson

dj = DataJson()
catalog = "tests/samples/full_data.json"
validation_result = dj.is_valid_catalog(catalog)
validation_report = dj.validate_catalog(catalog)

print validation_result
True

print validation_report
{
    "status": "OK",
    "error": {
        "catalog": {
            "status": "OK",
            "errors": [],
            "title": "Datos Argentina"
        },
        "dataset": [
            {
                "status": "OK",
                "errors": [],
                "title": "Sistema de contrataciones electr贸nicas"
            }
        ]
    }
}
Otros formatos

pydatajson puede interpretar cat谩logos en formatos:

Los cat谩logos pueden estar almacenados localmente o remotamente a trav茅s de URLs de descarga directa. Tambi茅n es capaz de interpretar diccionarios de Python con metadatos de cat谩logos.

from pydatajson import DataJson

dj = DataJson()
catalogs = [
    "tests/samples/full_data.json", # archivo JSON local
    "http://181.209.63.71/data.json", # archivo JSON remoto
    "tests/samples/catalogo_justicia.xlsx", # archivo XLSX local
    "https://raw.githubusercontent.com/datosgobar/pydatajson/master/tests/samples/catalogo_justicia.xlsx", # archivo XLSX remoto
    {
        "title": "Cat谩logo del Portal Nacional",
    "description" "Datasets abiertos para el ciudadano."
        "dataset": [...],
    (...)
    } # diccionario de Python
]

for catalog in catalogs:
    validation_result = dj.is_valid_catalog(catalog)
    validation_report = dj.validate_catalog(catalog)
Generaci贸n de reportes y configuraciones del Harvester

Si ya se sabe que se desean cosechar todos los datasets [v谩lidos] de uno o varios cat谩logos, se pueden utilizar directamente el m茅todo generate_harvester_config(), proveyendo harvest='all' o harvest='valid' respectivamente. Si se desea revisar manualmente la lista de datasets contenidos, se puede invocar primero generate_datasets_report(), editar el reporte generado y luego prove茅rselo a generate_harvester_config(), junto con la opci贸n harvest='report'.

Crear un archivo de configuraci贸n eligiendo manualmente los datasets a federar
catalogs = ["tests/samples/full_data.json", "http://181.209.63.71/data.json"]
report_path = "path/to/report.xlsx"
dj.generate_datasets_report(
    catalogs=catalogs,
    harvest='none', # El reporte tendr谩 `harvest==0` para todos los datasets
    export_path=report_path
)

# A continuaci贸n, se debe editar el archivo de Excel 'path/to/report.xlsx',
# cambiando a '1' el campo 'harvest' en los datasets que se quieran cosechar.

config_path = 'path/to/config.csv'
dj.generate_harvester_config(
    harvest='report',
    report=report_path,
    export_path=config_path
)

El archivo config_path puede ser provisto a Harvester para federar los datasets elegidos al editar el reporte intermedio report_path.

Por omisi贸n, en la salida de generate_harvester_config la frecuencia de actualizaci贸n deseada para cada dataset ser谩 芦R/P1D禄, para intentar cosecharlos diariamente. De preferir otra frecuencia (siempre y cuando sea v谩lida seg煤n ISO 8601), se la puede especificar a trav茅s del par谩metro opcional frequency. Si especifica exp暮icitamente frequency=None, se conservar谩n las frecuencias de actualizaci贸n indicadas en el campo accrualPeriodicity de cada dataset.

Crear un archivo de configuraci贸n que incluya 煤nicamente los datasets con metadata v谩lida

Conservando las variables anteriores:

dj.generate_harvester_config(
    catalogs=catalogs,
    harvest='valid'
    export_path='path/to/config.csv'
)
Transformaci贸n de un archivo de metados XLSX al est谩ndar JSON
from pydatajson.readers import read_catalog
from pydatajson.writers import write_json
from pydatajson import DataJson

dj = DataJson()
catalogo_xlsx = "tests/samples/catalogo_justicia.xlsx"

catalogo = read_catalog(catalogo_xlsx)
write_json(obj=catalogo, path="tests/temp/catalogo_justicia.json")
Generaci贸n de indicadores de monitoreo de cat谩logos

pydatajson puede calcular indicadores sobre uno o m谩s cat谩logos. Estos indicadores recopilan informaci贸n de inter茅s sobre los datasets de cada uno, tales como:

  • el estado de validez de los cat谩logos;
  • el n煤mero de d铆as desde su 煤ltima actualizaci贸n;
  • el formato de sus distribuciones;
  • frecuencia de actualizaci贸n de los datasets;
  • estado de federaci贸n de los datasets, compar谩ndolo con el cat谩logo central

La funci贸n usada es generate_catalogs_indicators, que acepta los cat谩logos como par谩metros. Devuelve dos valores:

  • una lista con tantos valores como cat谩logos, con cada elemento siendo un diccionario con los indicadores del cat谩logo respectivo;
  • un diccionario con los indicadores de la red entera (una suma de los individuales)
catalogs = ["tests/samples/full_data.json", "http://181.209.63.71/data.json"]
indicators, network_indicators = dj.generate_catalogs_indicators(catalogs)

# Opcionalmente podemos pasar como segundo argumento un cat谩logo central,
# para poder calcular indicadores sobre la federaci贸n de los datasets en 'catalogs'

central_catalog = "http://datos.gob.ar/data.json"
indicators, network_indicators = dj.generate_catalogs_indicators(catalogs, central_catalog)

Tests

Los tests se corren con nose. Desde la ra铆z del repositorio:

Configuraci贸n inicial:

$ pip install -r requirements_dev.txt
$ mkdir tests/temp

Correr la suite de tests:

$ nosetests

Cr茅ditos

El validador de archivos data.json desarrollado es mayormente un envoltorio (wrapper) alrededor de la librer铆a jsonschema, que implementa el vocabulario definido por JSONSchema.org para anotar y validar archivos JSON.

Manual de uso

Contexto

La pol铆tica de Datos Abiertos de la Rep煤blica Argentina que nace con el Decreto 117/2016 (芦Plan de Apertura de Datos鈥) se basa en un esquema descentralizado donde se conforma una red de nodos publicadores de datos y un nodo central o indexador.

El pilar fundamental de este esquema es el cumplimiento de un Perfil Nacional de Metadatos com煤n a todos los nodos, en el que cada organismo de la APN que publique un archivo data.json o formato alternativo compatible.

Esto posibilita que todos los conjuntos de datos (datasets) publicados por organismos de la Administraci贸n P煤blica Nacional se puedan encontrar en el Portal Nacional de Datos: http://datos.gob.ar/.

Glosario

Un cat谩logo de datos abiertos est谩 compuesto por datasets, que a su vez son cada uno un conjunto de distribuciones (archivos descargables). Ver la Gu铆a para el uso y la publicaci贸n de metadatos para m谩s informaci贸n.

  • Cat谩logo de datos: Directorio de conjuntos de datos que recopila y organiza metadatos descriptivos de los datos que produce una organizaci贸n. Un portal de datos es una implementaci贸n posible de un cat谩logo. Tambi茅n lo es un archivo Excel, un JSON u otras.
  • Dataset: Tambi茅n llamado conjunto de datos. Pieza principal en todo cat谩logo. Se trata de un activo de datos que agrupa recursos referidos a un mismo tema, que respetan una estructura de la informaci贸n. Los recursos que lo componen pueden diferir en el formato en que se los presenta (por ejemplo: .csv, .json, .xls, etc.), la fecha a la que se refieren, el 谩rea geogr谩fica cubierta o estar separados bajo alg煤n otro criterio.
  • Distribuci贸n o recurso: Es la unidad m铆nima de un cat谩logo de datos. Se trata de los activos de datos que se publican all铆 y que pueden ser descargados y re-utilizados por un usuario como archivos. Los recursos pueden tener diversos formatos (.csv, .shp, etc.). Est谩n acompa帽ados de informaci贸n contextual asociada (鈥渕etadata鈥) que describe el tipo de informaci贸n que se publica, el proceso por el cual se obtiene, la descripci贸n de los campos del recurso y cualquier informaci贸n extra que facilite su interpretaci贸n, procesamiento y lectura.
  • data.json y catalog.xlsx: Son las dos representaciones externas de los metadatos de un cat谩logo que pydatajson comprende. Para poder ser analizados program谩ticamente, los metadatos de un cat谩logo deben estar representados en un formato estandarizado: el PAD establece el archivo data.json para tal fin, y pydatajson permite leer una versi贸n en XLSX equivalente.
  • diccionario de metadatos: Es la representaci贸n interna que la librer铆a tiene de los metadatos de un cat谩logo. Todas las rutinas de la librer铆a pydatajson que manipulan cat谩logos, toman como entrada una representaci贸n externa (data.json o catalog.xlsx) del cat谩logo, y lo primero que hacen es 芦leerla禄 y generar una representaci贸n interna de la informaci贸n que la rutina sea capaz de manipular.

Uso

.. autofunction:: pydatajson.backup.main

芦帽alksdj禄

Setup

DataJson valida cat谩logos contra un esquema default que cumple con el perfil de metadatos recomendado en la Gu铆a para el uso y la publicaci贸n de metadatos del Paquete de Apertura de Datos.

from pydatajson import DataJson

catalog = DataJson("http://datos.gob.ar/data.json")

Si se desea utilizar un esquema alternativo, se debe especificar un directorio absoluto donde se almacenan los esquemas (schema_dir) y un nombre de esquema de validaci贸n (schema_filename), relativo al directorio de los esquemas. Por ejemplo, si nuestro esquema alternativo se encuentra en /home/datosgobar/metadatos-portal/esquema_de_validacion.json, especificaremos:

from pydatajson import DataJson

catalog = DataJson("http://datos.gob.ar/data.json",
                   schema_filename="esquema_de_validacion.json",
                   schema_dir="/home/datosgobar/metadatos-portal")
Lectura

pydatajson puede leer un cat谩logo en JSON, XLSX, CKAN o dict de python:

from pydatajson.ckan_reader import read_ckan_catalog
import requests

# data.json
catalog = DataJson("http://datos.gob.ar/data.json")
catalog = DataJson("local/path/data.json")

# catalog.xlsx
catalog = DataJson("http://datos.gob.ar/catalog.xlsx")
catalog = DataJson("local/path/catalog.xlsx")

# CKAN
catalog = DataJson(read_ckan_catalog("http://datos.gob.ar"))

# diccionario de python
catalog_dict = requests.get("http://datos.gob.ar/data.json").json()
catalog = DataJson(catalog_dict)
Escritura
Validaci贸n

Validar los metadatos de un cat谩logo y corregir errores.

from pydatajson import DataJson

catalog = DataJson("tests/samples/full_data.json")

# es falso si existe por lo menos UN error / verdadero si no hay ning煤n error
validation_result = catalog.is_valid_catalog(catalog)

# objeto con los errores encontrados
validation_report = catalog.validate_catalog(catalog, only_errors=True)

# se puede tener el reporte en distintos formatos para transformar m谩s f谩cilmente en un informe en CSV o Excel
validation_report = catalog.validate_catalog(catalog, only_errors=True, fmt="list")

Tambi茅n se puede correr desde la l铆nea de comandos para ver un resultado r谩pido.

pydatajson validation "tests/samples/full_data.json"
pydatajson validation http://datos.gob.ar/data.json

Un ejemplo del resultado completo de validate_catalog() se puede consultar en el Anexo I: Estructura de respuestas.

Federaci贸n y restauraci贸n

pydatajson permite federar o restaurar f谩cilmente un dataset de un cat谩logo hacia un Portal Andino (usa todo el perfil de metadatos) o CKAN (s贸lo usa campos de metadatos de CKAN), utilizando la API de CKAN.

Para esto hace falta un apikey que se puede sacar de la API de CKAN /api/action/user_list ingresando con un usuario administrador.

Federar un dataset

Incluye la transformaci贸n de algunos metadatos, para adaptar un dataset de un nodo original a c贸mo debe documentarse en un nodo indexador.

catalog_origin = DataJson("https://datos.agroindustria.gob.ar/data.json")

catalog_origin.harvest_dataset_to_ckan(
    owner_org="ministerio-de-agroindustria",
    dataset_origin_identifier="8109e9e8-f8e9-41d1-978a-d20fcd2fe5f5",
    portal_url="http://datos.gob.ar",
    apikey="apikey",
    catalog_id="agroindustria"
)

La organizaci贸n del nodo de destino debe estar previamente creada.

Restaurar un dataset

Los metadatos no sufren transformaciones: se escribe el dataset en el nodo de destino tal cual est谩 en el nodo original.

catalog_origin = DataJson("datosgobar/backup/2018-01-01/data.json")

catalog_origin.restore_dataset_to_ckan(
    owner_org="ministerio-de-agroindustria",
    dataset_origin_identifier="8109e9e8-f8e9-41d1-978a-d20fcd2fe5f5",
    portal_url="http://datos.gob.ar",
    apikey="apikey"
)

La organizaci贸n del nodo de destino debe estar previamente creada. En este caso no hace falta catalog_id porque el dataset_identifier no sufre ninguna transformaci贸n.

Transformaci贸n de catalog.xlsx a data.json

La lectura de un archivo de metadatos por parte de pydatajson.readers.read_catalog no realiza ning煤n tipo de verificaci贸n sobre la validez de los metadatos le铆dos. Por ende, si se quiere generar un archivo en formato JSON est谩ndar 煤nicamente en caso de que los metadatos de archivo XLSX sean v谩lidos, se deber谩 realizar la validaci贸n por separado.

El siguiente c贸digo, por ejemplo, escribe a disco un cat谩logos de metadatos en formato JSONO s铆 y s贸lo s铆 los metadatos del XLSX le铆do son v谩lidos:

from pydatajson.readers import read_catalog
from pydatajson.writers import write_json
from pydatajson import DataJson

catalog = DataJson()
catalogo_xlsx = "tests/samples/catalogo_justicia.xlsx"

catalogo = read_catalog(catalogo_xlsx)
if catalog.is_valid_catalog(catalogo):
    write_json(obj=catalogo, path="tests/temp/catalogo_justicia.json")
else:
    print "Se encontraron metadatos inv谩lidos. Operaci贸n de escritura cancelada."

Para m谩s informaci贸n y una versi贸n m谩s detallada de esta rutina en Jupyter Notebook, dirigirse aqu铆 (metadatos v谩lidos) y aqu铆 (metadatos inv谩lidos).

Generaci贸n de reportes

El objetivo final de los m茅todos generate_datasets_report, generate_harvester_config y generate_harvestable_catalogs, es proveer la configuraci贸n que Harvester necesita para cosechar datasets. Todos ellos devuelven una 芦tabla禄, que consiste en una lista de diccionarios que comparten las mismas claves (consultar ejemplos en el Anexo I: Estructura de respuestas). A continuaci贸n, se proveen algunos ejemplos de uso comunes:

Crear un archivo de configuraci贸n eligiendo manualmente los datasets a federar
catalogs = ["tests/samples/full_data.json", "http://181.209.63.71/data.json"]
report_path = "path/to/report.xlsx"
catalog.generate_datasets_report(
    catalogs=catalogs,
    harvest='none', # El reporte generado tendr谩 `harvest==0` para todos los datasets
    export_path=report_path
)
# A continuaci贸n, se debe editar el archivo de Excel 'path/to/report.xlsx', cambiando a '1' el campo 'harvest' para aquellos datasets que se quieran cosechar.

config_path = 'path/to/config.csv'
catalog.generate_harvester_config(
    harvest='report',
    report=report_path,
    export_path=config_path
)

El archivo config_path puede ser provisto a Harvester para federar los datasets elegidos al editar el reporte intermedio report_path.

Alternativamente, el output de generate_datasets_report() se puede editar en un int茅rprete de python:

# Asigno el resultado a una variable en lugar de exportarlo
datasets_report = catalog.generate_datasets_report(
    catalogs=catalogs,
    harvest='none', # El reporte generado tendr谩 `harvest==0` para todos los datasets
)
# Imaginemos que s贸lo se desea federar el primer dataset del reporte:
datasets_report[0]["harvest"] = 1

config_path = 'path/to/config.csv'
catalog.generate_harvester_config(
    harvest='report',
    report=datasets_report,
    export_path=config_path
)
Crear un archivo de configuraci贸n que incluya 煤nicamente los datasets con metadata v谩lida

Conservando las variables anteriores:

catalog.generate_harvester_config(
    catalogs=catalogs,
    harvest='valid'
    export_path='path/to/config.csv'
)

Para fines ilustrativos, se incluye el siguiente bloque de c贸digo que produce los mismos resultados, pero genera el reporte intermedio sobre datasets:

datasets_report = catalog.generate_datasets_report(
    catalogs=catalogs,
    harvest='valid'
)

# Como el reporte ya contiene la informaci贸n necesaria sobre los datasets que se pretende cosechar, el argumento `catalogs` es innecesario.
catalog.generate_harvester_config(
    harvest='report'
    report=datasets_report
    export_path='path/to/config.csv'
)
Modificar cat谩logos para conservar 煤nicamente los datasets v谩lidos
# Creamos un directorio donde guardar los cat谩logos
output_dir = "catalogos_limpios"
import os; os.mkdir(output_dir)

catalog.generate_harvestable_catalogs(
    catalogs,
    harvest='valid',
    export_path=output_dir
)

Funcionalidades

La librer铆a cuenta con funciones para tres objetivos principales:

  • validaci贸n de metadatos de cat谩logos y los datasets,
  • generaci贸n de reportes sobre el contenido y la validez de los metadatos de cat谩logos y datasets,
  • transformaci贸n de archivos de metadatos al formato est谩ndar (JSON),
  • federaci贸n de datasets a portales de destino.

Como se menciona en el Glosario estos m茅todos no tienen acceso directo a ning煤n cat谩logo, dataset ni distribuci贸n, sino 煤nicamente a sus representaciones externas: archivos o partes de archivos en formato JSON que describen ciertas propiedades. Por conveniencia, en este documento se usan frases como 芦validar el dataset X禄, cuando una versi贸n m谩s precisa ser铆a 芦validar la fracci贸n del archivo data.json que consiste en una representaci贸n del dataset X en forma de diccionario禄. La diferencia es sutil, pero conviene mantenerla presente.

Todos los m茅todos p煤blicos de la librer铆a toman como primer par谩metro catalog:

  • o bien un diccionario de metadatos (una representaci贸n interna),
  • o la ruta (local o remota) a un archivo de metadatos en formato legible (idealmente JSON, alternativamente XLSX).

Cuando el par谩metro esperado es catalogs, en plural, se le puede pasar o un 煤nico cat谩logo, o una lista de ellos.

Todos los m茅todos comienzan por convertir catalog(s) en una representaci贸n interna un铆voca: un diccionario cuyas claves son las definidas en el Perfil de Metadatos. La conversi贸n se realiza a trav茅s de pydatajson.readers.read_catalog(catalog): 茅ste es la funci贸n que todos ellos invocan para obtener un diccionario de metadatos est谩ndar.

M茅todos de validaci贸n de metadatos
  • pydatajson.DataJson.is_valid_catalog(catalog) -> bool: Responde True 煤nicamente si el cat谩logo no contiene ning煤n error.
  • pydatajson.DataJson.validate_catalog(catalog) -> dict: Responde un diccionario con informaci贸n detallada sobre la validez 芦global禄 de los metadatos, junto con detalles sobre la validez de los metadatos a nivel cat谩logo y cada uno de sus datasets. De haberlos, incluye una lista con informaci贸n sobre los errores encontrados.
M茅todos de transformaci贸n de formatos de metadatos

Transformar un archivo de metadatos de un formato a otro implica un primer paso de lectura de un formato, y un segundo paso de escritura a un formato distinto. Para respetar las disposiciones del PAD, s贸lo se pueden escribir cat谩logos en formato JSON.

  • pydatajson.readers.read_catalog(): M茅todo que todas las funciones de DataJson llaman en primer lugar para interpretar cualquier tipo de representaci贸n externa de un cat谩logo.
  • pydatajson.writers.write_json_catalog(): Fina capa de abstracci贸n sobre pydatajson.writers.write_json, que simplemente vuelca un objeto de Python a un archivo en formato JSON.
M茅todos de generaci贸n de reportes
Para federaci贸n de datasets

Los siguientes m茅todos toman una o varias representaciones externas de cat谩logos, y las procesan para generar reportes espec铆ficos sobre su contenido:

  • pydatajson.DataJson.generate_datasets_report(): Devuelve un reporte con informaci贸n clave sobre cada dataset incluido en un cat谩logo, junto con variables indicando la validez de sus metadatos.
  • pydatajson.DataJson.generate_harvester_config(): Devuelve un reporte con los campos m铆nimos que requiere el Harvester para federar un conjunto de datasets.
  • pydatajson.DataJson.generate_harvestable_catalogs(): Devuelve la lista de cat谩logos ingresada, filtrada de forma que cada uno incluya 煤nicamente los datasets que se pretende que el Harvester federe.

Los tres m茅todos toman los mismos cuatro par谩metros, que se interpretan de manera muy similar:

  • catalogs: Representaci贸n externa de un cat谩logo, o una lista compuesta por varias de ellas.
  • harvest: Criterio de decisi贸n utilizado para marcar los datasets a ser federados/cosechados. Acepta los siguientes valores:
    • 'all': Cosechar todos los datasets presentes en catalogs.
    • 'none': No cosechar ninguno de los datasets presentes en catalogs.
    • 'valid': Cosechar 煤nicamente los datasets que no contengan errores, ni en su propia metadata ni en la metadata global del cat谩logo.
    • 'report': Cosechar 煤nicamente los datasets indicados por el reporte provisto en report.
  • report: En caso de que se pretenda cosechar un conjunto espec铆fico de cat谩logos, esta variable debe recibir la representaci贸n externa (path a un archivo) o interna (lista de diccionarios) de un reporte que identifique los datasets a cosechar.
  • export_path: Esta variable controla el valor de retorno de los m茅todos de generaci贸n. Si es None, el m茅todo devolver谩 la representaci贸n interna del reporte generado. Si especifica el path a un archivo, el m茅todo devolver谩 None, pero escribir谩 a export_path la representaci贸n externa del reporte generado, en formato CSV o XLSX.

generate_harvester_config() puede tomar un par谩metro extra, frequency, que permitir谩 indicarle a la rutina de cosecha de con qu茅 frecuencia debe intentar actualizar su versi贸n de cierto dataset. Por omisi贸n, lo har谩 diariamente.

Para presentaci贸n de cat谩logos y datasets

Existen dos m茅todos, cuyos reportes se incluyen diariamente entre los archivos que disponibiliza el repositorio libreria-catalogos:

  • pydatajson.DataJson.generate_datasets_summary(): Devuelve un informe tabular (en formato CSV o XLSX) sobre los datasets de un cat谩logo, detallando cu谩ntas distribuciones tiene y el estado de sus propios metadatos.
  • pydatajson.DataJson.generate_catalog_readme(): Genera un archivo de texto plano en formato Markdown para ser utilizado como 芦README禄, es decir, como texto introductorio al contenido del cat谩logo.
M茅todos para federaci贸n de datasets
  • pydatajson.DataJson.push_dataset_to_ckan(): Copia la metadata de un dataset y la escribe en un portal de CKAN. Toma los siguientes par谩metros:
    • owner_org: La organizaci贸n a la que pertence el dataset. Debe encontrarse en el portal de destino.
    • dataset_origin_identifier: Identificador del dataset en el cat谩logo de origen.
    • portal_url: URL del portal de CKAN de destino.
    • apikey: La apikey de un usuario del portal de destino con los permisos para crear el dataset bajo la organizaci贸n pasada como par谩metro.
    • catalog_id (opcional, default: None): El prefijo que va a preceder el id y name del dataset en el portal destino, separado por un gui贸n.
    • demote_superThemes (opcional, default: True):Si est谩 en true, los ids de los themes del dataset, se escriben como groups de CKAN.
    • demote_themes (opcional, default: True): Si est谩 en true, los labels de los themes del dataset, se escriben como tags de CKAN; sino,se pasan como grupo.
    • download_strategy (opcional, default None): La referencia a una funci贸n que toma (catalog, distribution) de entrada y devuelve un booleano. Esta funci贸n se aplica sobre todas las distribuciones del dataset. Si devuelve True, se descarga el archivo indicado en el downloadURL de la distribuci贸n y se lo sube al portal de destino. Si es None, se omite esta operaci贸n.
    • generate_new_access_url (opcional, default None): Se pasan los ids de las distribuciones cuyo accessURL se regenerar en el portal de destino. Para el resto, el portal debe mantiene el valor pasado en el DataJson.

Retorna el id en el nodo de destino del dataset federado.

Advertencia: La funci贸n push_dataset_to_ckan() s贸lo garantiza consistencia con los est谩ndares de CKAN. Para mantener una consistencia m谩s estricta dentro del cat谩logo a federar, es necesario validar los datos antes de pasarlos a la funci贸n.

  • pydatajson.federation.remove_dataset_from_ckan(): Hace un borrado f铆sico de un dataset en un portal de CKAN. Toma los siguientes par谩metros:

    • portal_url: La URL del portal CKAN. Debe implementar la funcionalidad de /data.json.
    • apikey: La apikey de un usuario con los permisos que le permitan borrar el dataset.
    • filter_in: Define el diccionario de filtro en el campo dataset. El filtro acepta los datasets cuyos campos coincidan con todos los del diccionario filter_in['dataset'].
    • filter_out: Define el diccionario de filtro en el campo dataset. El filtro acepta los datasets cuyos campos coincidan con alguno de los del diccionario filter_out['dataset'].
    • only_time_series: Borrar los datasets que tengan recursos con series de tiempo.
    • organization: Borrar los datasets que pertenezcan a cierta organizacion.

    En caso de pasar m谩s de un par谩metro opcional, la funci贸n remove_dataset_from_ckan() borra aquellos datasets que cumplan con todas las condiciones.

  • pydatajson.DataJson.push_theme_to_ckan(): Crea un tema en el portal de destino Toma los siguientes par谩metros:

    • portal_url: La URL del portal CKAN.
    • apikey: La apikey de un usuario con los permisos que le permitan crear un grupo.
    • identifier (opcional, default: None): Id del theme que se quiere federar, en el cat谩logo de origen.
    • label (opcional, default: None): label del theme que se quiere federar, en el cat谩logo de origen.

    Debe pasarse por lo menos uno de los 2 par谩metros opcionales. En caso de que se provean los 2, se prioriza el identifier sobre el label.

  • pydatajson.DataJson.push_new_themes(): Toma los temas de la taxonom铆a de un DataJson y los crea en el cat谩logo de destino si no existen. Toma los siguientes par谩metros:

    • portal_url: La URL del portal CKAN adonde se escribiran los temas.
    • apikey: La apikey de un usuario con los permisos que le permitan crear los grupos.

Hay tambi茅n funciones que facilitan el uso de push_dataset_to_ckan():

  • pydatajson.DataJson.harvest_dataset_to_ckan(): Federa la metadata de un dataset en un portal de CKAN. Toma los siguientes par谩metros:
    • owner_org: La organizaci贸n a la que pertence el dataset. Debe encontrarse en el portal de destino.
    • dataset_origin_identifier: Identificador del dataset en el cat谩logo de origen.
    • portal_url: URL del portal de CKAN de destino.
    • apikey: La apikey de un usuario del portal de destino con los permisos para crear el dataset bajo la organizaci贸n pasada como par谩metro.
    • catalog_id: El prefijo que va a preceder el id y name del dataset en el portal destino, separado por un gui贸n.
    • download_strategy (opcional, default None): La referencia a una funci贸n que toma (catalog, distribution) de entrada y devuelve un booleano. Esta funci贸n se aplica sobre todas las distribuciones del dataset. Si devuelve True, se descarga el archivo indicado en el downloadURL de la distribuci贸n y se lo sube al portal de destino. Si es None, se omite esta operaci贸n.

Retorna el id en el nodo de destino del dataset federado.

  • pydatajson.DataJson.restore_dataset_to_ckan(): Restaura la metadata de un dataset en un portal de CKAN. Toma los siguientes par谩metros:
    • owner_org: La organizaci贸n a la que pertence el dataset. Debe encontrarse en el portal de destino.
    • dataset_origin_identifier: Identificador del dataset en el cat谩logo de origen.
    • portal_url: URL del portal de CKAN de destino.
    • apikey: La apikey de un usuario del portal de destino con los permisos para crear el dataset bajo la organizaci贸n pasada como par谩metro.
    • download_strategy (opcional, default None): La referencia a una funci贸n que toma (catalog, distribution) de entrada y devuelve un booleano. Esta funci贸n se aplica sobre todas las distribuciones del dataset. Si devuelve True, se descarga el archivo indicado en el downloadURL de la distribuci贸n y se lo sube al portal de destino. Si es None, se omite esta operaci贸n.
    • generate_new_access_url (opcional, default None): Se pasan los ids de las distribuciones cuyo accessURL se regenerar en el portal de destino. Para el resto, el portal debe mantiene el valor pasado en el DataJson.

Retorna el id del dataset restaurado.

  • pydatajson.DataJson.harvest_catalog_to_ckan(): Federa los datasets de un cat谩logo al portal pasado por par谩metro. Toma los siguientes par谩metros:

    • dataset_origin_identifier: Identificador del dataset en el cat谩logo de origen.
    • portal_url: URL del portal de CKAN de destino.
    • apikey: La apikey de un usuario del portal de destino con los permisos para crear el dataset.
    • catalog_id: El prefijo que va a preceder el id y name del dataset en el portal destino, separado por un gui贸n.
    • dataset_list (opcional, default: None): Lista de ids de los datasets a federar. Si no se pasa, se federan todos los datasets del cat谩logo.
    • owner_org (opcional, default: None): La organizaci贸n a la que pertence el dataset. Debe encontrarse en el portal de destino. Si no se pasa, se toma como organizaci贸n el catalog_id.
    • download_strategy (opcional, default None): La referencia a una funci贸n que toma (catalog, distribution) de entrada y devuelve un booleano. Esta funci贸n se aplica sobre todas las distribuciones del cat谩logo. Si devuelve True, se descarga el archivo indicado en el downloadURL de la distribuci贸n y se lo sube al portal de destino. Si es None, se omite esta operaci贸n.

    Retorna el id en el nodo de destino de los datasets federados.

  • pydatajson.DataJson.restore_organization_to_ckan(): Restaura los datasets de una organizaci贸n al portal pasado por par谩metro. Toma los siguientes par谩metros:

    • catalog: El cat谩logo de origen que se restaura.
    • portal_url: La URL del portal CKAN de destino.
    • apikey: La apikey de un usuario con los permisos que le permitan crear o actualizar los dataset.
    • dataset_list: Los ids de los datasets a restaurar. Si no se pasa una lista, todos los datasests se restauran.
    • owner_org: La organizaci贸n a la cual pertencen los datasets.
    • download_strategy: Una funci贸n (cat谩logo, distribuci贸n)->bool. Sobre las distribuciones que eval煤a True, descarga el recurso en el downloadURL y lo sube al portal de destino. Por default no sube ninguna distribuci贸n.
    • generate_new_access_url (opcional, default None): Se pasan los ids de las distribuciones cuyo accessURL se regenerar en el portal de destino. Para el resto, el portal debe mantiene el valor pasado en el DataJson.

    Retorna la lista de ids de datasets subidos.

  • pydatajson.DataJson.restore_catalog_to_ckan(): Restaura los datasets de un cat谩logo al portal pasado por par谩metro. Toma los siguientes par谩metros:

    • catalog: El cat谩logo de origen que se restaura.
    • origin_portal_url: La URL del portal CKAN de origen.
    • destination_portal_url: La URL del portal CKAN de destino.
    • apikey: La apikey de un usuario con los permisos que le permitan crear o actualizar los dataset.
    • download_strategy: Una funci贸n (cat谩logo, distribuci贸n)-> bool. Sobre las distribuciones que eval煤a True, descarga el recurso en el downloadURL y lo sube al portal de destino. Por default no sube ninguna distribuci贸n.
    • generate_new_access_url (opcional, default None): Se pasan los ids de las distribuciones cuyo accessURL se regenerar en el portal de destino. Para el resto, el portal debe mantiene el valor pasado en el DataJson.

    Retorna un diccionario con key organizaci贸n y value la lista de ids de datasets subidos a esa organizaci贸n

  • pydatajson.federation.resources_update(): Sube archivos de recursos a las distribuciones indicadas y regenera los accessURL en las distribuciones indicadas. Toma los siguientes par谩metros:

    • portal_url: URL del portal de CKAN de destino.
    • apikey: La apikey de un usuario del portal de destino con los permisos para modificar la distribuci贸n.
    • distributions: Lista de distribuciones posibles para actualizar.
    • resource_files Diccionario con el id de las distribuciones y un path al recurso correspondiente a subir.
    • generate_new_access_url (opcional, default None): Lista de ids de distribuciones a las cuales se actualizar谩 el accessURL con los valores generados por el portal de destino.
    • catalog_id (opcional, default None): prependea el id al id del recurso para encontrarlo antes de subirlo si es necesario.

Retorna una lista con los ids de las distribuciones modificadas exitosamente.

Advertencia: La funci贸n resources_update() cambia el resource_type de las distribuciones a file.upload.

M茅todos para manejo de organizaciones
  • pydatajson.federation.get_organizations_from_ckan(): Devuelve el 谩rbol de organizaciones del portal pasado por par谩metro. Toma los siguientes par谩metros:

    • portal_url: URL del portal de CKAN. Debe implementar el endpoint /group_tree.

    Retorna una lista de diccionarios con la informaci贸n de las organizaciones. Recursivamente, dentro del campo children, se encuentran las organizaciones dependientes en la jerarqu铆a.

  • pydatajson.federation.get_organization_from_ckan(): Devuelve un diccionario con la informaci贸n de una organizaci贸n en base a un id y un portal pasados por par谩metro. Toma los siguientes par谩metros:

    • portal_url: URL del portal de CKAN. Debe implementar el endpoint /organization_show.
    • org_id: Identificador o name de la organizaci贸n a buscar.

    Retorna un diccionario con la informaci贸n de la organizaci贸n correspondiente al identificador obtenido. No incluye su jerarqu铆a, por lo cual 茅sta deber谩 ser conseguida mediante el uso de la funci贸n get_organizations_from_ckan.

  • pydatajson.federation.push_organization_tree_to_ckan(): Tomando un 谩rbol de organizaciones como el creado por get_organizations_from_ckan() crea en el portal de destino las organizaciones dentro de su jerarqu铆a. Toma los siguientes par谩metros:

    • portal_url: La URL del portal CKAN de destino.
    • apikey: La apikey de un usuario con los permisos que le permitan crear las organizaciones.
    • org_tree: lista de diccionarios con la data de organizaciones a crear.
    • parent (opcional, default: None): Si se pasa, el 谩rbol de organizaciones pasado en org_tree se crea bajo la organizaci贸n con name pasado en parent. Si no se pasa un par谩metro, las organizaciones son creadas como primer nivel.

    Retorna el 谩rbol de organizaciones creadas. Cada nodo tiene un campo success que indica si fue creado exitosamente o no. En caso de que success sea False, los hijos de esa organizaci贸n no son creados.

  • pydatajson.federation.push_organization_to_ckan(): Tomando en un diccionario la data de una organizaci贸n; la crea en el portal de destino. Toma los siguientes par谩metros:

    • portal_url: La URL del portal CKAN de destino.
    • apikey: La apikey de un usuario con los permisos que le permitan crear las organizaciones.
    • organization: Diccionario con la informaci贸n a crear, el 煤nico campo obligatorio es name. Para m谩s informaci贸n sobre los campos posibles, ver la documentaci贸n de CKAN
    • parent (opcional, default: None): Si se define, la organizaci贸n pasada en organization se crea bajo la organizaci贸n con name pasado en parent. Si no se pasa un par谩metro, las organizaciones son creadas como primer nivel.

    Retorna el diccionario de la organizaci贸n creada. El resultado tiene un campo success que indica si fue creado exitosamente o no.

  • pydatajson.federation.remove_organization_from_ckan(): Tomando el id o name de una organizaci贸n; la borra en el portal de destino. Toma los siguientes par谩metros:

    • portal_url: La URL del portal CKAN de destino.
    • apikey: La apikey de un usuario con los permisos que le permitan borrar la organizaci贸n.
    • organization_id: Id o name de la organizaci贸n a borrar.

    Retorna None.

    Advertencia: En caso de que la organizaci贸n tenga hijos en la jerarqu铆a, estos pasan a ser de primer nivel.

  • pydatajson.federation.remove_organizations_from_ckan(): Tomando una lista de ids o names de organizaciones, las borra en el portal de destino. Toma los siguientes par谩metros:

    • portal_url: La URL del portal CKAN de destino.
    • apikey: La apikey de un usuario con los permisos que le permitan borrar organizaciones.
    • organization_list: Lista de id o names de las organizaciones a borrar.

    Retorna None.

Anexo I: Estructura de respuestas

validate_catalog()

El resultado de la validaci贸n completa de un cat谩logo, es un diccionario con la siguiente estructura:

{
    "status": "OK",  # resultado de la validaci贸n global
    "error": {
    "catalog": {
            # validez de la metadata propia del cat谩logo, ignorando los
            # datasets particulares
        "status": "OK",
        "errors": []
        "title": "T铆tulo Catalog"},
    "dataset": [
        {
        # Validez de la metadata propia de cada dataset
                "status": "OK",
        "errors": [],
        "title": "Titulo Dataset 1"
        },
        {
        "status": "ERROR",
        "errors": [
                    {
                        "error_code": 2,
                        "instance": "",
                        "message": "'' is not a 'email'",
                        "path": ["publisher", "mbox"],
                        "validator": "format",
                        "validator_value": "email"
                   },
                   {
                        "error_code": 2,
                        "instance": "",
                        "message": """ is too short",
                        "path": ["publisher", "name"],
                        "validator": "minLength",
                        "validator_value": 1
                   }
               ],
               "title": "Titulo Dataset 2"
        }
    ]
    }
}

Si validate_catalog() encuentra alg煤n error, 茅ste se reportar谩 en la lista errors del nivel correspondiente, a trav茅s de un diccionario con las siguientes claves:

  • path: Posici贸n en el diccionario de metadata del cat谩logo donde se encontr贸 el error.
  • instance: Valor concreto que no pas贸 la validaci贸n. Es el valor de la clave path en la metadata del cat谩logo.
  • message: Descripci贸n humanamente legible explicando el error.
  • validator: Nombre del validador violado, (芦type禄 para errores de tipo, 芦minLength禄 para errores de cadenas vac铆as, et c茅tera).
  • validator_value: Valor esperado por el validador validator, que no fue respetado.
  • error_code: C贸digo describiendo gen茅ricamente el error. Puede ser:
    • 1: Valor obligatorio faltante: Un campo obligatorio no se encuentra presente.
    • 2: Error de tipo y formato: se esperaba un array y se encontr贸 un dict, se esperaba un string en formato email y se encontr贸 una string que no cumple con el formato, et c茅tera.
generate_datasets_report()

El reporte resultante tendr谩 tantas filas como datasets contenga el conjunto de cat谩logos ingresado, y contar谩 con los siguientes campos, casi todos autodescriptivos:

  • catalog_metadata_url: En caso de que se haya provisto una representaci贸n externa de un cat谩logo, la string de su ubicaci贸n; sino None.
  • catalog_title
  • catalog_description
  • valid_catalog_metadata: Validez de la metadata 芦global禄 del cat谩logo, es decir, ignorando la metadata de datasets particulares.
  • dataset_title
  • dataset_description
  • dataset_index: Posici贸n (comenzando desde cero) en la que aparece el dataset en cuesti贸n en lista del campo catalog["dataset"].
  • valid_dataset_metadata: Validez de la metadata espec铆fica a este dataset que figura en el cat谩logo (catalog["dataset"][dataset_index]).
  • harvest: 鈥0鈥 o 鈥1鈥, seg煤n se desee excluir o incluir, respectivamente, un dataset de cierto proceso de cosecha. El default es 鈥0鈥, pero se puede controlar a trav茅s del par谩metro 鈥渉arvest鈥.
  • dataset_accrualPeriodicity
  • dataset_publisher_name
  • dataset_superTheme: Lista los valores que aparecen en el campo dataset[芦superTheme禄], separados por comas.
  • dataset_theme: Lista los valores que aparecen en el campo dataset[芦theme禄], separados por comas.
  • dataset_landingPage
  • distributions_list: Lista los t铆tulos y direcciones de descarga de todas las distribuciones incluidas en un dataset, separadas por 芦newline禄.

La representaci贸n interna de este reporte es una lista compuesta en su totalidad de diccionarios con las claves mencionadas. La representaci贸n externa de este reporte, es un archivo con informaci贸n tabular, en formato CSV o XLSX. A continuaci贸n, un ejemplo de la lista de diccionarios que devuelve generate_datasets_report():

[
    {
        "catalog_metadata_url": "http://181.209.63.71/data.json",
        "catalog_title": "Andino",
        "catalog_description": "Portal Andino Demo",
        "valid_catalog_metadata": 0,
        "dataset_title": "Dataset Demo",
        "dataset_description": "Este es un dataset de ejemplo, se incluye como material DEMO y no contiene ningun valor estadistico.",
        "dataset_index": 0,
        "valid_dataset_metadata": 1,
        "harvest": 0,
        "dataset_accrualPeriodicity": "eventual",
        "dataset_publisher_name": "Andino",
        "dataset_superThem"": "TECH",
        "dataset_theme": "Tema.demo",
        "dataset_landingPage": "https://github.com/datosgobar/portal-andino",
        "distributions_list": ""Recurso de Ejemplo": http://181.209.63.71/dataset/6897d435-8084-4685-b8ce-304b190755e4/resource/6145bf1c-a2fb-4bb5-b090-bb25f8419198/download/estructura-organica-3.csv"
    },
    {
        "catalog_metadata_url": "http://datos.gob.ar/data.json",
        "catalog_title": "Portal Nacional de Datos Abiertos",
        ( ... )
    }
]
generate_harvester_config()

Este reporte se puede generar a partir de un conjunto de cat谩logos, o a partir del resultado de generate_datasets_report(), pues no es m谩s que un subconjunto del mismo. Incluye 煤nicamente las claves necesarias para que el Harvester pueda federar un dataset, si 'harvest'==1:

  • catalog_metadata_url
  • dataset_title
  • dataset_accrualPeriodicity

La representaci贸n interna de este reporte es una lista compuesta en su totalidad de diccionarios con las claves mencionadas. La representaci贸n externa de este reporte, es un archivo con informaci贸n tabular, en formato CSV o XLSX. A continuaci贸n, un ejemplo con la lista de diccionarios que devuelve generate_harvester_config():

[
    {
        "catalog_metadata_url": "tests/samples/full_data.json",
        "dataset_title": "Sistema de contrataciones electr贸nicas",
        "dataset_accrualPeriodicity": "R/P1Y"
    },
    {
        "catalog_metadata_url": "tests/samples/several_datasets_for_harvest.json",
        "dataset_title": "Sistema de Alumbrado P煤blico CABA",
        "dataset_accrualPeriodicity": "R/P1Y"
    },
    {
        "catalog_metadata_url": "tests/samples/several_datasets_for_harvest.json",
        "dataset_title": "Listado de Presidentes Argentinos",
        "dataset_accrualPeriodicity": "R/P1Y"
    }
]
generate_datasets_summary()

Se genera a partir de un 煤nico cat谩logo, y contiene, para cada uno de dus datasets:

  • 脥ndice: El 铆ndice, identificador posicional del dataset dentro de la lista catalog["dataset"].
  • T铆tulo: dataset[芦title禄], si lo tiene (es un campo obligatorio).
  • Identificador: dataset[芦identifier禄], si lo tiene (es un campo recomendado).
  • Cantidad de Errores: Cu谩ntos errores de validaci贸n contiene el dataset, seg煤n figure en el detalle de validate_catalog
  • Cantidad de Distribuiones: El largo de la lista dataset["distribution"]

A continuaci贸n, un fragmento del resultado de este m茅todo al aplicarlo sobre el Cat谩logo del Ministerio de Justicia:

[OrderedDict([(u'indice', 0),
              (u'titulo', u'Base de datos legislativos Infoleg'),
              (u'identificador', u'd9a963ea-8b1d-4ca3-9dd9-07a4773e8c23'),
              (u'estado_metadatos', u'OK'),
              (u'cant_errores', 0),
              (u'cant_distribuciones', 3)]),
 OrderedDict([(u'indice', 1),
              (u'titulo', u'Centros de Acceso a la Justicia -CAJ-'),
              (u'identificador', u'9775fcdf-99b9-47f6-87ae-6d46cfd15b40'),
              (u'estado_metadatos', u'OK'),
              (u'cant_errores', 0),
              (u'cant_distribuciones', 1)]),
 OrderedDict([(u'indice', 2),
              (u'titulo',
               u'Sistema de Consulta Nacional de Rebeld\xedas y Capturas - Co.Na.R.C.'),
              (u'identificador', u'e042c362-ff39-476f-9328-056a9de753f0'),
              (u'estado_metadatos', u'OK'),
              (u'cant_errores', 0),
              (u'cant_distribuciones', 1)]),

( ... 13 datasets m谩s ...)

 OrderedDict([(u'indice', 15),
              (u'titulo',
               u'Registro, Sistematizaci\xf3n y Seguimiento de Hechos de Violencia Institucional'),
              (u'identificador', u'c64b3899-65df-4024-afe8-bdf971f30dd8'),
              (u'estado_metadatos', u'OK'),
              (u'cant_errores', 0),
              (u'cant_distribuciones', 1)])]
generate_catalog_readme()

Este reporte en texto plano se pretende como primera introducci贸n somera al contenido de un cat谩logo, como figurar谩n en la Librer铆a de Cat谩logos. Incluye datos clave sobre el editor responsable del cat谩logo, junto con:

  • estado de los metadatos a nivel cat谩logo,
  • estado global de los metadatos, y
  • cantidad de datasets y distribuciones incluidas.

A continuaci贸n, el resultado de este m茅todo al aplicarlo sobre el Cat谩logo del Ministerio de Justicia:

# Cat谩logo: Datos Justicia Argentina

## Informaci贸n General

- **Autor**: Ministerio de Justicia y Derechos Humanos
- **Correo Electr贸nico**: justiciaabierta@jus.gov.ar
- **Nombre del cat谩logo**: Datos Justicia Argentina
- **Descripci贸n**:

> Portal de Datos de Justicia de la Rep煤blica Argentina. El Portal publica datos del sistema de justicia de modo que pueda ser reutilizada para efectuar visualizaciones o desarrollo de aplicaciones. Esta herramienta se propone como un punto de encuentro entre las organizaciones de justicia y la ciudadan铆a.

## Estado de los metadatos y cantidad de recursos

Estado metadatos globales | Estado metadatos cat谩logo | # de Datasets | # de Distribuciones
----------------|---------------------------|---------------|--------------------
OK | OK | 16 | 56

## Datasets incluidos

Por favor, consulte el informe [`datasets.csv`](datasets.csv).

Referencia r谩pida

Lectura

class pydatajson.core.DataJson(catalog=None, schema_filename=None, schema_dir=None, default_values=None, catalog_format=None, validator_class=<class 'pydatajson.validation.Validator'>, verify_ssl=False, requests_timeout=30)[fuente]

Objeto que representa un cat谩logo de activos de datos.

__init__(catalog=None, schema_filename=None, schema_dir=None, default_values=None, catalog_format=None, validator_class=<class 'pydatajson.validation.Validator'>, verify_ssl=False, requests_timeout=30)[fuente]

Lee un cat谩logo y crea un objeto con funciones para manipularlo.

Salvo que se indique lo contrario, se utiliza como default el schema de la versi贸n 1.1 del Perfil de Metadatos de Argentina.

Par谩metros:
  • catalog (dict or str) 鈥 Representaci贸n externa/interna de un cat谩logo. Una representaci贸n _externa_ es un path local o una URL remota a un archivo con la metadata de un cat谩logo, en formato JSON o XLSX. La representaci贸n _interna_ de un cat谩logo es un diccionario. Ejemplos: http://datos.gob.ar/data.json, http://www.ign.gob.ar/descargas/geodatos/catalog.xlsx, 芦/energia/catalog.xlsx禄.
  • schema_filename (str) 鈥 Nombre del archivo que contiene el esquema validador.
  • schema_dir (str) 鈥 Directorio (absoluto) donde se encuentra el esquema validador (y sus referencias, de tenerlas).
  • default_values (dict) 鈥

    Valores default para algunos de los campos del cat谩logo:

    {
        "dataset_issued": "2017-06-22",
        "distribution_issued": "2017-06-22"
    }
    

Escritura

class pydatajson.core.DataJson(catalog=None, schema_filename=None, schema_dir=None, default_values=None, catalog_format=None, validator_class=<class 'pydatajson.validation.Validator'>, verify_ssl=False, requests_timeout=30)[fuente]

Objeto que representa un cat谩logo de activos de datos.

to_json(path)

Escribe el cat谩logo en JSON.

Par谩metros:
  • catalog (DataJson) 鈥 Cat谩logo de datos.
  • path (str) 鈥 Directorio absoluto donde se crea el archivo XLSX.
to_xlsx(path, xlsx_fields=None)

Escribe el cat谩logo en Excel.

Par谩metros:
  • catalog (DataJson) 鈥 Cat谩logo de datos.
  • path (str) 鈥 Directorio absoluto donde se crea el archivo XLSX.
  • xlsx_fields (dict) 鈥 Orden en que los campos del perfil de metadatos se escriben en cada hoja del Excel.

Validaci贸n

class pydatajson.core.DataJson(catalog=None, schema_filename=None, schema_dir=None, default_values=None, catalog_format=None, validator_class=<class 'pydatajson.validation.Validator'>, verify_ssl=False, requests_timeout=30)[fuente]

Objeto que representa un cat谩logo de activos de datos.

is_valid_catalog(catalog=None)[fuente]

Valida que un archivo data.json cumpla con el schema definido.

Chequea que el data.json tiene todos los campos obligatorios y que tanto los campos obligatorios como los opcionales siguen la estructura definida en el schema.

Par谩metros:catalog (str o dict) 鈥 Cat谩logo (dict, JSON o XLSX) a ser validado. Si no se pasa, valida este cat谩logo.
Devuelve:True si el data.json cumple con el schema, sino False.
Tipo del valor devuelto:
 bool
validate_catalog(catalog=None, only_errors=False, fmt=u'dict', export_path=None)[fuente]

Analiza un data.json registrando los errores que encuentra.

Chequea que el data.json tiene todos los campos obligatorios y que tanto los campos obligatorios como los opcionales siguen la estructura definida en el schema.

Par谩metros:
  • catalog (str o dict) 鈥 Cat谩logo (dict, JSON o XLSX) a ser validado. Si no se pasa, valida este cat谩logo.
  • only_errors (bool) 鈥 Si es True s贸lo se reportan los errores.
  • fmt (str) 鈥

    Indica el formato en el que se desea el reporte. 芦dict禄 es el reporte m谩s verborr谩gico respetando la

    estructura del data.json.
    禄list禄 devuelve un dict con listas de errores formateados para
    generar tablas.
  • export_path (str) 鈥 Path donde exportar el reporte generado (en formato XLSX o CSV). Si se especifica, el m茅todo no devolver谩 nada, a pesar de que se pase alg煤n argumento en fmt.
Devuelve:

Diccionario resumen de los errores encontrados:

{
    "status": "OK",  # resultado de la validaci贸n global
    "error": {
        "catalog": {
            "status": "OK",
            "errors": []
            "title": "T铆tulo Catalog"},
        "dataset": [
            {
                "status": "OK",
                "errors": [],
                "title": "Titulo Dataset 1"
            },
            {
                "status": "ERROR",
                "errors": [error1_info, error2_info, ...],
                "title": "Titulo Dataset 2"
            }
        ]
    }
}

Donde errorN_info es un dict con la informaci贸n del N-茅simo error encontrado, con las siguientes claves: 芦path禄, 芦instance禄, 芦message禄, 芦validator禄, 芦validator_value禄, 芦error_code禄.

Tipo del valor devuelto:
 

dict

B煤squeda

class pydatajson.core.DataJson(catalog=None, schema_filename=None, schema_dir=None, default_values=None, catalog_format=None, validator_class=<class 'pydatajson.validation.Validator'>, verify_ssl=False, requests_timeout=30)[fuente]

Objeto que representa un cat谩logo de activos de datos.

get_dataset(identifier=None, title=None)

Devuelve un Dataset del cat谩logo.

get_datasets(filter_in=None, filter_out=None, meta_field=None, exclude_meta_fields=None, only_time_series=False)

Devuelve una lista de datasets del cat谩logo o de uno de sus metadatos.

Par谩metros:
  • catalog (dict, str or DataJson) 鈥 Representaci贸n externa/interna de un cat谩logo. Una representaci贸n _externa_ es un path local o una URL remota a un archivo con la metadata de un cat谩logo, en formato JSON o XLSX. La representaci贸n _interna_ de un cat谩logo es un diccionario. Ejemplos: http://datos.gob.ar/data.json, http://www.ign.gob.ar/descargas/geodatos/catalog.xlsx, 芦/energia/catalog.xlsx禄.
  • filter_in (dict) 鈥

    Devuelve los datasets cuyos atributos coinciden con los pasados en este diccionario. Ejemplo:

    {
        "dataset": {
            "publisher": {"name": "Ministerio de Ambiente"}
        }
    }
    

    S贸lo se devolver谩n los datasets de ese publisher_name.

  • filter_out (dict) 鈥

    Devuelve los datasets cuyos atributos no coinciden con los pasados en este diccionario. Ejemplo:

    {
        "dataset": {
            "publisher": {"name": "Ministerio de Ambiente"}
        }
    }
    

    S贸lo se devolver谩n los datasets que no sean de ese publisher_name.

  • meta_field (str) 鈥 Nombre de un metadato de Dataset. En lugar de devolver los objetos completos 芦Dataset禄, devuelve una lista de valores para ese metadato presentes en el cat谩logo.
  • exclude_meta_fields (list) 鈥 Metadatos de Dataset que se quieren excluir de los objetos Dataset devueltos.
  • only_time_series (bool) 鈥 Si es verdadero, s贸lo devuelve datasets que tengan por lo menos una distribuci贸n de series de tiempo.
get_field(identifier=None, title=None, distribution_identifier=None)

Devuelve un Field del cat谩logo.

get_fields(filter_in=None, filter_out=None, meta_field=None, only_time_series=False, distribution_identifier=None)

Devuelve lista de campos del cat谩logo o de uno de sus metadatos.

Par谩metros:
  • catalog (dict, str or DataJson) 鈥 Representaci贸n externa/interna de un cat谩logo. Una representaci贸n _externa_ es un path local o una URL remota a un archivo con la metadata de un cat谩logo, en formato JSON o XLSX. La representaci贸n _interna_ de un cat谩logo es un diccionario. Ejemplos: http://datos.gob.ar/data.json, http://www.ign.gob.ar/descargas/geodatos/catalog.xlsx, 芦/energia/catalog.xlsx禄.
  • filter_in (dict) 鈥

    Devuelve los campos cuyos atributos coinciden con los pasados en este diccionario. Ejemplo:

    {
        "dataset": {
            "publisher": {"name": "Ministerio de Ambiente"}
        }
    }
    

    S贸lo se devolver谩n los campos que pertenezcan a un dataset de ese publisher_name.

  • filter_out (dict) 鈥

    Devuelve los campos cuyos atributos no coinciden con los pasados en este diccionario. Ejemplo:

    {
        "dataset": {
            "publisher": {"name": "Ministerio de Ambiente"}
        }
    }
    

    S贸lo se devolver谩n los campos que no pertenezcan a un dataset de ese publisher_name.

  • meta_field (str) 鈥 Nombre de un metadato de Field. En lugar de devolver los objetos completos 芦Field禄, devuelve una lista de valores para ese metadato presentes en el cat谩logo.
  • exclude_meta_fields (list) 鈥 Metadatos de Field que se quieren excluir de los objetos Field devueltos.
  • only_time_series (bool) 鈥 Si es verdadero, s贸lo devuelve campos que sean series de tiempo.

Indicadores

class pydatajson.core.DataJson(catalog=None, schema_filename=None, schema_dir=None, default_values=None, catalog_format=None, validator_class=<class 'pydatajson.validation.Validator'>, verify_ssl=False, requests_timeout=30)[fuente]

Objeto que representa un cat谩logo de activos de datos.

Reportes

class pydatajson.core.DataJson(catalog=None, schema_filename=None, schema_dir=None, default_values=None, catalog_format=None, validator_class=<class 'pydatajson.validation.Validator'>, verify_ssl=False, requests_timeout=30)[fuente]

Objeto que representa un cat谩logo de activos de datos.

generate_catalog_readme(catalog, export_path=None)

Este m茅todo est谩 para mantener retrocompatibilidad con versiones anteriores. Se ignora el argumento _data_json.

generate_datasets_summary(catalog, export_path=None)[fuente]

Genera un informe sobre los datasets presentes en un cat谩logo, indicando para cada uno:

  • 脥ndice en la lista catalog[芦dataset禄]
  • T铆tulo
  • Identificador
  • Cantidad de distribuciones
  • Estado de sus metadatos [芦OK禄|禄ERROR禄]

Es utilizada por la rutina diaria de libreria-catalogos para reportar sobre los datasets de los cat谩logos mantenidos.

Par谩metros:
  • catalog (str o dict) 鈥 Path a un cat谩logo en cualquier formato, JSON, XLSX, o diccionario de python.
  • export_path (str) 鈥 Path donde exportar el informe generado (en formato XLSX o CSV). Si se especifica, el m茅todo no devolver谩 nada.
Devuelve:

Contiene tantos dicts como datasets est茅n presentes en catalogs, con los datos antes mencionados.

Tipo del valor devuelto:
 

list

Federaci贸n

class pydatajson.core.DataJson(catalog=None, schema_filename=None, schema_dir=None, default_values=None, catalog_format=None, validator_class=<class 'pydatajson.validation.Validator'>, verify_ssl=False, requests_timeout=30)[fuente]

Objeto que representa un cat谩logo de activos de datos.

harvest_catalog_to_ckan(portal_url, apikey, catalog_id, dataset_list=None, owner_org=None, download_strategy=None, origin_tz='America/Buenos_Aires', dst_tz='America/Buenos_Aires')

Federa los datasets de un cat谩logo al portal pasado por par谩metro.

Par谩metros:
  • catalog (DataJson) 鈥 El cat谩logo de origen que se federa.
  • portal_url (str) 鈥 La URL del portal CKAN de destino.
  • apikey (str) 鈥 La apikey de un usuario con los permisos que le permitan crear o actualizar el dataset.
  • catalog_id (str) 鈥 El prefijo con el que va a preceder el id del dataset en cat谩logo destino.
  • dataset_list (list(str)) 鈥 Los ids de los datasets a federar. Si no se pasa una lista, todos los datasests se federan.
  • owner_org (str) 鈥 La organizaci贸n a la cual pertencen los datasets. Si no se pasa, se utiliza el catalog_id.
  • download_strategy (callable) 鈥 Una funci贸n (cat谩logo, distribuci贸n)-> bool. Sobre las distribuciones que eval煤a True, descarga el recurso en el downloadURL y lo sube al portal de destino. Por default no sube ninguna distribuci贸n.
  • origin_tz (str) 鈥 Timezone de origen, un string (EJ: Africa/Bamako) el cual identifica el timezone del emisor del DataJson.
  • dst_tz (str) 鈥 Timezone de destino, un string (EJ: Antarctica/Palmer) el cual identifica el timezone del receptor del DataJson, comunmente el timezone del servidor.
Devuelve:

El id del dataset en el cat谩logo de destino.

Tipo del valor devuelto:
 

str

harvest_dataset_to_ckan(owner_org, dataset_origin_identifier, portal_url, apikey, catalog_id, download_strategy=None, origin_tz='America/Buenos_Aires', dst_tz='America/Buenos_Aires')

Federa la metadata de un dataset en el portal pasado por par谩metro.

Par谩metros:
  • catalog (DataJson) 鈥 El cat谩logo de origen que contiene el dataset.
  • owner_org (str) 鈥 La organizaci贸n a la cual pertence el dataset.
  • dataset_origin_identifier (str) 鈥 El id del dataset que se va a restaurar.
  • portal_url (str) 鈥 La URL del portal CKAN de destino.
  • apikey (str) 鈥 La apikey de un usuario con los permisos que le permitan crear o actualizar el dataset.
  • catalog_id (str) 鈥 El id que prependea al dataset y recursos
  • download_strategy (callable) 鈥 Una funci贸n (cat谩logo, distribuci贸n)-> bool. Sobre las distribuciones que eval煤a True, descarga el recurso en el downloadURL y lo sube al portal de destino. Por default no sube ninguna distribuci贸n.
  • origin_tz (str) 鈥 Timezone de origen, un string (EJ: Africa/Bamako) el cual identifica el timezone del emisor del DataJson.
  • dst_tz (str) 鈥 Timezone de destino, un string (EJ: Antarctica/Palmer) el cual identifica el timezone del receptor del DataJson, comunmente el timezone del servidor.
Devuelve:

El id del dataset restaurado.

Tipo del valor devuelto:
 

str

push_new_themes(portal_url, apikey)

Toma un cat谩logo y escribe los temas de la taxonom铆a que no est谩n presentes.

Args:
catalog (DataJson): El cat谩logo de origen que contiene la
taxonom铆a.

portal_url (str): La URL del portal CKAN de destino. apikey (str): La apikey de un usuario con los permisos que le

permitan crear o actualizar los temas.
Returns:
str: Los ids de los temas creados.
push_theme_to_ckan(portal_url, apikey, identifier=None, label=None)

Escribe la metadata de un theme en el portal pasado por par谩metro.

Par谩metros:
  • catalog (DataJson) 鈥 El cat谩logo de origen que contiene el theme.
  • portal_url (str) 鈥 La URL del portal CKAN de destino.
  • apikey (str) 鈥 La apikey de un usuario con los permisos que le permitan crear o actualizar el dataset.
  • identifier (str) 鈥 El identificador para buscar el theme en la taxonomia.
  • label (str) 鈥 El label para buscar el theme en la taxonomia.
Devuelve:

El name del theme en el cat谩logo de destino.

Tipo del valor devuelto:
 

str

restore_catalog_to_ckan(origin_portal_url, destination_portal_url, apikey, download_strategy=None, generate_new_access_url=None, origin_tz='America/Buenos_Aires', dst_tz='America/Buenos_Aires')

Restaura los datasets de un cat谩logo original al portal pasado por par谩metro. Si hay temas presentes en el DataJson que no est谩n en el portal de CKAN, los genera.

Args:

catalog (DataJson): El cat谩logo de origen que se restaura. origin_portal_url (str): La URL del portal CKAN de origen. destination_portal_url (str): La URL del portal CKAN de

destino.
apikey (str): La apikey de un usuario con los permisos que le
permitan crear o actualizar el dataset.
download_strategy(callable): Una funci贸n
(cat谩logo, distribuci贸n)-> bool. Sobre las distribuciones que eval煤a True, descarga el recurso en el downloadURL y lo sube al portal de destino. Por default no sube ninguna distribuci贸n.
generate_new_access_url(list): Se pasan los ids de las
distribuciones cuyo accessURL se regenerar en el portal de destino. Para el resto, el portal debe mantiene el valor pasado en el DataJson.
origin_tz(str): Timezone de origen, un string
(EJ: Africa/Bamako) el cual identifica el timezone del emisor del DataJson.
dst_tz(str): Timezone de destino, un string
(EJ: Antarctica/Palmer) el cual identifica el timezone del receptor del DataJson, comunmente el timezone del servidor.
Returns:
dict: Diccionario con key organizaci贸n y value la lista de ids
de datasets subidos a esa organizaci贸n
restore_dataset_to_ckan(owner_org, dataset_origin_identifier, portal_url, apikey, download_strategy=None, generate_new_access_url=None, origin_tz='America/Buenos_Aires', dst_tz='America/Buenos_Aires')

Restaura la metadata de un dataset en el portal pasado por par谩metro.

Par谩metros:
  • catalog (DataJson) 鈥 El cat谩logo de origen que contiene el dataset.
  • owner_org (str) 鈥 La organizaci贸n a la cual pertence el dataset.
  • dataset_origin_identifier (str) 鈥 El id del dataset que se va a restaurar.
  • portal_url (str) 鈥 La URL del portal CKAN de destino.
  • apikey (str) 鈥 La apikey de un usuario con los permisos que le permitan crear o actualizar el dataset.
  • download_strategy (callable) 鈥 Una funci贸n (cat谩logo, distribuci贸n)-> bool. Sobre las distribuciones que eval煤a True, descarga el recurso en el downloadURL y lo sube al portal de destino. Por default no sube ninguna distribuci贸n.
  • generate_new_access_url (list) 鈥 Se pasan los ids de las distribuciones cuyo accessURL se regenerar en el portal de destino. Para el resto, el portal debe mantiene el valor pasado en el DataJson.
  • origin_tz (str) 鈥 Timezone de origen, un string (EJ: Africa/Bamako) el cual identifica el timezone del emisor del DataJson.
  • dst_tz (str) 鈥 Timezone de destino, un string (EJ: Antarctica/Palmer) el cual identifica el timezone del receptor del DataJson, comunmente el timezone del servidor.
Devuelve:

El id del dataset restaurado.

Tipo del valor devuelto:
 

str

pydatajson.federation.remove_dataset_from_ckan(identifier, portal_url, apikey, verify_ssl=False, requests_timeout=30)[fuente]

Referencia

Referencia completa

DataJson

M贸dulo principal de pydatajson

Contiene la clase DataJson que re煤ne los m茅todos p煤blicos para trabajar con archivos data.json.

class pydatajson.core.DataJson(catalog=None, schema_filename=None, schema_dir=None, default_values=None, catalog_format=None, validator_class=<class 'pydatajson.validation.Validator'>, verify_ssl=False, requests_timeout=30)[fuente]

Objeto que representa un cat谩logo de activos de datos.

catalog_report(catalog, harvest=u'none', report=None, catalog_id=None, catalog_homepage=None, catalog_org=None)[fuente]

Genera un reporte sobre los datasets de un 煤nico cat谩logo.

Par谩metros:
  • catalog (dict, str o unicode) 鈥 Representaci贸n externa (path/URL) o interna (dict) de un cat谩logo.
  • harvest (str) 鈥 Criterio de cosecha (鈥渁ll鈥, 鈥渘one鈥, 鈥渧alid鈥, 鈥渞eport鈥 o 鈥済ood鈥).
Devuelve:

Lista de diccionarios, con un elemento por cada dataset

presente en catalog.

Tipo del valor devuelto:
 

list

datasets

Devuelve una lista de datasets del cat谩logo o de uno de sus metadatos.

Par谩metros:
  • catalog (dict, str or DataJson) 鈥 Representaci贸n externa/interna de un cat谩logo. Una representaci贸n _externa_ es un path local o una URL remota a un archivo con la metadata de un cat谩logo, en formato JSON o XLSX. La representaci贸n _interna_ de un cat谩logo es un diccionario. Ejemplos: http://datos.gob.ar/data.json, http://www.ign.gob.ar/descargas/geodatos/catalog.xlsx, 芦/energia/catalog.xlsx禄.
  • filter_in (dict) 鈥

    Devuelve los datasets cuyos atributos coinciden con los pasados en este diccionario. Ejemplo:

    {
        "dataset": {
            "publisher": {"name": "Ministerio de Ambiente"}
        }
    }
    

    S贸lo se devolver谩n los datasets de ese publisher_name.

  • filter_out (dict) 鈥

    Devuelve los datasets cuyos atributos no coinciden con los pasados en este diccionario. Ejemplo:

    {
        "dataset": {
            "publisher": {"name": "Ministerio de Ambiente"}
        }
    }
    

    S贸lo se devolver谩n los datasets que no sean de ese publisher_name.

  • meta_field (str) 鈥 Nombre de un metadato de Dataset. En lugar de devolver los objetos completos 芦Dataset禄, devuelve una lista de valores para ese metadato presentes en el cat谩logo.
  • exclude_meta_fields (list) 鈥 Metadatos de Dataset que se quieren excluir de los objetos Dataset devueltos.
  • only_time_series (bool) 鈥 Si es verdadero, s贸lo devuelve datasets que tengan por lo menos una distribuci贸n de series de tiempo.
distributions

Devuelve lista de distribuciones del cat谩logo o de uno de sus metadatos.

Par谩metros:
  • catalog (dict, str or DataJson) 鈥 Representaci贸n externa/interna de un cat谩logo. Una representaci贸n _externa_ es un path local o una URL remota a un archivo con la metadata de un cat谩logo, en formato JSON o XLSX. La representaci贸n _interna_ de un cat谩logo es un diccionario. Ejemplos: http://datos.gob.ar/data.json, http://www.ign.gob.ar/descargas/geodatos/catalog.xlsx, 芦/energia/catalog.xlsx禄.
  • filter_in (dict) 鈥

    Devuelve los distribuciones cuyos atributos coinciden con los pasados en este diccionario. Ejemplo:

    {
        "dataset": {
            "publisher": {"name": "Ministerio de Ambiente"}
        }
    }
    

    S贸lo se devolver谩n los distribuciones que pertenezcan a un dataset de ese publisher_name.

  • filter_out (dict) 鈥

    Devuelve los distribuciones cuyos atributos no coinciden con los pasados en este diccionario. Ejemplo:

    {
        "dataset": {
            "publisher": {"name": "Ministerio de Ambiente"}
        }
    }
    

    S贸lo se devolver谩n los distribuciones que no pertenezcan a un dataset de ese publisher_name.

  • meta_field (str) 鈥 Nombre de un metadato de Distribution. En lugar de devolver los objetos completos Distribution, devuelve una lista de valores para ese metadato presentes en el cat谩logo.
  • exclude_meta_fields (list) 鈥 Metadatos de Distribution que se quieren excluir de los objetos Distribution devueltos.
  • only_time_series (bool) 鈥 Si es verdadero, s贸lo devuelve distribuciones que sean distribuciones de series de tiempo.
fields

Devuelve lista de campos del cat谩logo o de uno de sus metadatos.

Par谩metros:
  • catalog (dict, str or DataJson) 鈥 Representaci贸n externa/interna de un cat谩logo. Una representaci贸n _externa_ es un path local o una URL remota a un archivo con la metadata de un cat谩logo, en formato JSON o XLSX. La representaci贸n _interna_ de un cat谩logo es un diccionario. Ejemplos: http://datos.gob.ar/data.json, http://www.ign.gob.ar/descargas/geodatos/catalog.xlsx, 芦/energia/catalog.xlsx禄.
  • filter_in (dict) 鈥

    Devuelve los campos cuyos atributos coinciden con los pasados en este diccionario. Ejemplo:

    {
        "dataset": {
            "publisher": {"name": "Ministerio de Ambiente"}
        }
    }
    

    S贸lo se devolver谩n los campos que pertenezcan a un dataset de ese publisher_name.

  • filter_out (dict) 鈥

    Devuelve los campos cuyos atributos no coinciden con los pasados en este diccionario. Ejemplo:

    {
        "dataset": {
            "publisher": {"name": "Ministerio de Ambiente"}
        }
    }
    

    S贸lo se devolver谩n los campos que no pertenezcan a un dataset de ese publisher_name.

  • meta_field (str) 鈥 Nombre de un metadato de Field. En lugar de devolver los objetos completos 芦Field禄, devuelve una lista de valores para ese metadato presentes en el cat谩logo.
  • exclude_meta_fields (list) 鈥 Metadatos de Field que se quieren excluir de los objetos Field devueltos.
  • only_time_series (bool) 鈥 Si es verdadero, s贸lo devuelve campos que sean series de tiempo.
generate_catalog_readme(catalog, export_path=None)

Este m茅todo est谩 para mantener retrocompatibilidad con versiones anteriores. Se ignora el argumento _data_json.

generate_dataset_documentation(dataset_identifier, export_path=None, catalog=None)[fuente]

Genera texto en markdown a partir de los metadatos de una dataset.

Par谩metros:
  • dataset_identifier (str) 鈥 Identificador 煤nico de un dataset.
  • export_path (str) 鈥 Path donde exportar el texto generado. Si se especifica, el m茅todo no devolver谩 nada.
  • catalog (dict, str o unicode) 鈥 Representaci贸n externa (path/URL) o interna (dict) de un cat谩logo. Si no se especifica se usa el cat谩logo cargado en self (el propio objeto DataJson).
Devuelve:

Texto que describe una dataset.

Tipo del valor devuelto:
 

str

generate_datasets_report(catalogs, harvest=u'valid', report=None, export_path=None, catalog_ids=None, catalog_homepages=None, catalog_orgs=None)[fuente]

Genera un reporte sobre las condiciones de la metadata de los datasets contenidos en uno o varios cat谩logos.

Par谩metros:
  • catalogs (str, dict o list) 鈥 Uno (str o dict) o varios (list de strs y/o dicts) cat谩logos.
  • harvest (str) 鈥 Criterio a utilizar para determinar el valor del campo 芦harvest禄 en el reporte generado (鈥渁ll鈥, 鈥渘one鈥, 鈥渧alid鈥, 鈥渞eport鈥 o 鈥済ood鈥).
  • report (str) 鈥 Path a un reporte/config especificando qu茅 datasets marcar con harvest=1 (s贸lo si harvest==鈥漴eport鈥).
  • export_path (str) 鈥 Path donde exportar el reporte generado (en formato XLSX o CSV). Si se especifica, el m茅todo no devolver谩 nada.
  • catalog_id (str) 鈥 Nombre identificador del cat谩logo para federaci贸n
  • catalog_homepage (str) 鈥

    URL del portal de datos donde est谩 implementado el cat谩logo. S贸lo se pasa si el portal es un CKAN o respeta la estructura:

    https://datos.{organismo}.gob.ar/dataset/{dataset_identifier}
Devuelve:

Contiene tantos dicts como datasets est茅n presentes en

catalogs, con la data del reporte generado.

Tipo del valor devuelto:
 

list

generate_datasets_summary(catalog, export_path=None)[fuente]

Genera un informe sobre los datasets presentes en un cat谩logo, indicando para cada uno:

  • 脥ndice en la lista catalog[芦dataset禄]
  • T铆tulo
  • Identificador
  • Cantidad de distribuciones
  • Estado de sus metadatos [芦OK禄|禄ERROR禄]

Es utilizada por la rutina diaria de libreria-catalogos para reportar sobre los datasets de los cat谩logos mantenidos.

Par谩metros:
  • catalog (str o dict) 鈥 Path a un cat谩logo en cualquier formato, JSON, XLSX, o diccionario de python.
  • export_path (str) 鈥 Path donde exportar el informe generado (en formato XLSX o CSV). Si se especifica, el m茅todo no devolver谩 nada.
Devuelve:

Contiene tantos dicts como datasets est茅n presentes en catalogs, con los datos antes mencionados.

Tipo del valor devuelto:
 

list

generate_distribution_ids()

Genera identificadores para las distribuciones que no los tienen.

Los identificadores de distribuciones se generan concatenando el id del dataset al que pertenecen con el 铆ndice posicional de la distribuci贸n en el dataset: distribution_identifier = 芦{dataset_identifier}_{index}禄.

generate_harvestable_catalogs(catalogs, harvest=u'all', report=None, export_path=None)[fuente]

Filtra los cat谩logos provistos seg煤n el criterio determinado en harvest.

Par谩metros:
  • catalogs (str, dict o list) 鈥 Uno (str o dict) o varios (list de strs y/o dicts) cat谩logos.
  • harvest (str) 鈥 Criterio para determinar qu茅 datasets conservar de cada cat谩logo (鈥渁ll鈥, 鈥渘one鈥, 鈥渧alid鈥 o 鈥渞eport鈥).
  • report (list o str) 鈥 Tabla de reporte generada por generate_datasets_report() como lista de diccionarios o archivo en formato XLSX o CSV. S贸lo se usa cuando harvest==鈥漴eport鈥.
  • export_path (str) 鈥 Path a un archivo JSON o directorio donde exportar los cat谩logos filtrados. Si termina en 芦.json禄 se exportar谩 la lista de cat谩logos a un 煤nico archivo. Si es un directorio, se guardar谩 en 茅l un JSON por cat谩logo. Si se especifica export_path, el m茅todo no devolver谩 nada.
Devuelve:

Lista de cat谩logos.

Tipo del valor devuelto:
 

list of dicts

generate_harvester_config(catalogs=None, harvest=u'valid', report=None, export_path=None)[fuente]

Genera un archivo de configuraci贸n del harvester a partir de un reporte, o de un conjunto de cat谩logos y un criterio de cosecha (harvest).

Par谩metros:
  • catalogs (str, dict o list) 鈥 Uno (str o dict) o varios (list de strs y/o dicts) cat谩logos.
  • harvest (str) 鈥 Criterio para determinar qu茅 datasets incluir en el archivo de configuraci贸n generado (鈥渁ll鈥, 鈥渘one鈥, 鈥渧alid鈥, 鈥渞eport鈥 o 鈥済ood鈥).
  • report (list o str) 鈥 Tabla de reporte generada por generate_datasets_report() como lista de diccionarios o archivo en formato XLSX o CSV. S贸lo se usa cuando harvest==鈥漴eport鈥, en cuyo caso catalogs se ignora.
  • export_path (str) 鈥 Path donde exportar el reporte generado (en formato XLSX o CSV). Si se especifica, el m茅todo no devolver谩 nada.
Devuelve:

Un diccionario con variables de configuraci贸n

por cada dataset a cosechar.

Tipo del valor devuelto:
 

list of dicts

get_catalog_metadata(exclude_meta_fields=None)

Devuelve s贸lo la metadata de nivel cat谩logo.

get_dataset(identifier=None, title=None)

Devuelve un Dataset del cat谩logo.

get_datasets(filter_in=None, filter_out=None, meta_field=None, exclude_meta_fields=None, only_time_series=False)

Devuelve una lista de datasets del cat谩logo o de uno de sus metadatos.

Par谩metros:
  • catalog (dict, str or DataJson) 鈥 Representaci贸n externa/interna de un cat谩logo. Una representaci贸n _externa_ es un path local o una URL remota a un archivo con la metadata de un cat谩logo, en formato JSON o XLSX. La representaci贸n _interna_ de un cat谩logo es un diccionario. Ejemplos: http://datos.gob.ar/data.json, http://www.ign.gob.ar/descargas/geodatos/catalog.xlsx, 芦/energia/catalog.xlsx禄.
  • filter_in (dict) 鈥

    Devuelve los datasets cuyos atributos coinciden con los pasados en este diccionario. Ejemplo:

    {
        "dataset": {
            "publisher": {"name": "Ministerio de Ambiente"}
        }
    }
    

    S贸lo se devolver谩n los datasets de ese publisher_name.

  • filter_out (dict) 鈥

    Devuelve los datasets cuyos atributos no coinciden con los pasados en este diccionario. Ejemplo:

    {
        "dataset": {
            "publisher": {"name": "Ministerio de Ambiente"}
        }
    }
    

    S贸lo se devolver谩n los datasets que no sean de ese publisher_name.

  • meta_field (str) 鈥 Nombre de un metadato de Dataset. En lugar de devolver los objetos completos 芦Dataset禄, devuelve una lista de valores para ese metadato presentes en el cat谩logo.
  • exclude_meta_fields (list) 鈥 Metadatos de Dataset que se quieren excluir de los objetos Dataset devueltos.
  • only_time_series (bool) 鈥 Si es verdadero, s贸lo devuelve datasets que tengan por lo menos una distribuci贸n de series de tiempo.
get_distribution(identifier=None, title=None, dataset_identifier=None)

Devuelve una Distribution del cat谩logo.

get_distributions(filter_in=None, filter_out=None, meta_field=None, exclude_meta_fields=None, only_time_series=False)

Devuelve lista de distribuciones del cat谩logo o de uno de sus metadatos.

Par谩metros:
  • catalog (dict, str or DataJson) 鈥 Representaci贸n externa/interna de un cat谩logo. Una representaci贸n _externa_ es un path local o una URL remota a un archivo con la metadata de un cat谩logo, en formato JSON o XLSX. La representaci贸n _interna_ de un cat谩logo es un diccionario. Ejemplos: http://datos.gob.ar/data.json, http://www.ign.gob.ar/descargas/geodatos/catalog.xlsx, 芦/energia/catalog.xlsx禄.
  • filter_in (dict) 鈥

    Devuelve los distribuciones cuyos atributos coinciden con los pasados en este diccionario. Ejemplo:

    {
        "dataset": {
            "publisher": {"name": "Ministerio de Ambiente"}
        }
    }
    

    S贸lo se devolver谩n los distribuciones que pertenezcan a un dataset de ese publisher_name.

  • filter_out (dict) 鈥

    Devuelve los distribuciones cuyos atributos no coinciden con los pasados en este diccionario. Ejemplo:

    {
        "dataset": {
            "publisher": {"name": "Ministerio de Ambiente"}
        }
    }
    

    S贸lo se devolver谩n los distribuciones que no pertenezcan a un dataset de ese publisher_name.

  • meta_field (str) 鈥 Nombre de un metadato de Distribution. En lugar de devolver los objetos completos Distribution, devuelve una lista de valores para ese metadato presentes en el cat谩logo.
  • exclude_meta_fields (list) 鈥 Metadatos de Distribution que se quieren excluir de los objetos Distribution devueltos.
  • only_time_series (bool) 鈥 Si es verdadero, s贸lo devuelve distribuciones que sean distribuciones de series de tiempo.
get_field(identifier=None, title=None, distribution_identifier=None)

Devuelve un Field del cat谩logo.

get_fields(filter_in=None, filter_out=None, meta_field=None, only_time_series=False, distribution_identifier=None)

Devuelve lista de campos del cat谩logo o de uno de sus metadatos.

Par谩metros:
  • catalog (dict, str or DataJson) 鈥 Representaci贸n externa/interna de un cat谩logo. Una representaci贸n _externa_ es un path local o una URL remota a un archivo con la metadata de un cat谩logo, en formato JSON o XLSX. La representaci贸n _interna_ de un cat谩logo es un diccionario. Ejemplos: http://datos.gob.ar/data.json, http://www.ign.gob.ar/descargas/geodatos/catalog.xlsx, 芦/energia/catalog.xlsx禄.
  • filter_in (dict) 鈥

    Devuelve los campos cuyos atributos coinciden con los pasados en este diccionario. Ejemplo:

    {
        "dataset": {
            "publisher": {"name": "Ministerio de Ambiente"}
        }
    }
    

    S贸lo se devolver谩n los campos que pertenezcan a un dataset de ese publisher_name.

  • filter_out (dict) 鈥

    Devuelve los campos cuyos atributos no coinciden con los pasados en este diccionario. Ejemplo:

    {
        "dataset": {
            "publisher": {"name": "Ministerio de Ambiente"}
        }
    }
    

    S贸lo se devolver谩n los campos que no pertenezcan a un dataset de ese publisher_name.

  • meta_field (str) 鈥 Nombre de un metadato de Field. En lugar de devolver los objetos completos 芦Field禄, devuelve una lista de valores para ese metadato presentes en el cat谩logo.
  • exclude_meta_fields (list) 鈥 Metadatos de Field que se quieren excluir de los objetos Field devueltos.
  • only_time_series (bool) 鈥 Si es verdadero, s贸lo devuelve campos que sean series de tiempo.
get_themes()

Devuelve la lista de temas del cat谩logo (taxonom铆a tem谩tica).

get_time_series(**kwargs)

Devuelve lista de series de tiempo del cat谩logo o uno de sus metadatos.

Par谩metros:
  • catalog (dict, str or DataJson) 鈥 Representaci贸n externa/interna de un cat谩logo. Una representaci贸n _externa_ es un path local o una URL remota a un archivo con la metadata de un cat谩logo, en formato JSON o XLSX. La representaci贸n _interna_ de un cat谩logo es un diccionario. Ejemplos: http://datos.gob.ar/data.json, http://www.ign.gob.ar/descargas/geodatos/catalog.xlsx, 芦/energia/catalog.xlsx禄.
  • filter_in (dict) 鈥

    Devuelve las series cuyos atributos coinciden con los pasados en este diccionario. Ejemplo:

    {
        "dataset": {
            "publisher": {"name": "Ministerio de Ambiente"}
        }
    }
    

    S贸lo se devolver谩n las series que pertenezcan a un dataset de ese publisher_name.

  • filter_out (dict) 鈥

    Devuelve las series cuyos atributos no coinciden con los pasados en este diccionario. Ejemplo:

    {
        "dataset": {
            "publisher": {"name": "Ministerio de Ambiente"}
        }
    }
    

    S贸lo se devolver谩n las series que no pertenezcan a un dataset de ese publisher_name.

  • meta_field (str) 鈥 Nombre de un metadato de Field. En lugar de devolver los objetos completos 芦Field禄, devuelve una lista de valores para ese metadato presentes en el cat谩logo.
  • exclude_meta_fields (list) 鈥 Metadatos de Field que se quieren excluir de los objetos Field devueltos.
harvest_catalog_to_ckan(portal_url, apikey, catalog_id, dataset_list=None, owner_org=None, download_strategy=None, origin_tz='America/Buenos_Aires', dst_tz='America/Buenos_Aires')

Federa los datasets de un cat谩logo al portal pasado por par谩metro.

Par谩metros:
  • catalog (DataJson) 鈥 El cat谩logo de origen que se federa.
  • portal_url (str) 鈥 La URL del portal CKAN de destino.
  • apikey (str) 鈥 La apikey de un usuario con los permisos que le permitan crear o actualizar el dataset.
  • catalog_id (str) 鈥 El prefijo con el que va a preceder el id del dataset en cat谩logo destino.
  • dataset_list (list(str)) 鈥 Los ids de los datasets a federar. Si no se pasa una lista, todos los datasests se federan.
  • owner_org (str) 鈥 La organizaci贸n a la cual pertencen los datasets. Si no se pasa, se utiliza el catalog_id.
  • download_strategy (callable) 鈥 Una funci贸n (cat谩logo, distribuci贸n)-> bool. Sobre las distribuciones que eval煤a True, descarga el recurso en el downloadURL y lo sube al portal de destino. Por default no sube ninguna distribuci贸n.
  • origin_tz (str) 鈥 Timezone de origen, un string (EJ: Africa/Bamako) el cual identifica el timezone del emisor del DataJson.
  • dst_tz (str) 鈥 Timezone de destino, un string (EJ: Antarctica/Palmer) el cual identifica el timezone del receptor del DataJson, comunmente el timezone del servidor.
Devuelve:

El id del dataset en el cat谩logo de destino.

Tipo del valor devuelto:
 

str

harvest_dataset_to_ckan(owner_org, dataset_origin_identifier, portal_url, apikey, catalog_id, download_strategy=None, origin_tz='America/Buenos_Aires', dst_tz='America/Buenos_Aires')

Federa la metadata de un dataset en el portal pasado por par谩metro.

Par谩metros:
  • catalog (DataJson) 鈥 El cat谩logo de origen que contiene el dataset.
  • owner_org (str) 鈥 La organizaci贸n a la cual pertence el dataset.
  • dataset_origin_identifier (str) 鈥 El id del dataset que se va a restaurar.
  • portal_url (str) 鈥 La URL del portal CKAN de destino.
  • apikey (str) 鈥 La apikey de un usuario con los permisos que le permitan crear o actualizar el dataset.
  • catalog_id (str) 鈥 El id que prependea al dataset y recursos
  • download_strategy (callable) 鈥 Una funci贸n (cat谩logo, distribuci贸n)-> bool. Sobre las distribuciones que eval煤a True, descarga el recurso en el downloadURL y lo sube al portal de destino. Por default no sube ninguna distribuci贸n.
  • origin_tz (str) 鈥 Timezone de origen, un string (EJ: Africa/Bamako) el cual identifica el timezone del emisor del DataJson.
  • dst_tz (str) 鈥 Timezone de destino, un string (EJ: Antarctica/Palmer) el cual identifica el timezone del receptor del DataJson, comunmente el timezone del servidor.
Devuelve:

El id del dataset restaurado.

Tipo del valor devuelto:
 

str

is_valid_catalog(catalog=None)[fuente]

Valida que un archivo data.json cumpla con el schema definido.

Chequea que el data.json tiene todos los campos obligatorios y que tanto los campos obligatorios como los opcionales siguen la estructura definida en el schema.

Par谩metros:catalog (str o dict) 鈥 Cat谩logo (dict, JSON o XLSX) a ser validado. Si no se pasa, valida este cat谩logo.
Devuelve:True si el data.json cumple con el schema, sino False.
Tipo del valor devuelto:
 bool
make_catalog_backup(catalog_id=None, local_catalogs_dir=u'', include_metadata=True, include_data=True, include_datasets=None, include_distribution_formats=[u'CSV', u'XLS'], include_metadata_xlsx=True, use_short_path=False)

Realiza una copia local de los datos y metadatos de un cat谩logo.

Par谩metros:
  • catalog (dict or str) 鈥 Representaci贸n externa/interna de un cat谩logo. Una representaci贸n _externa_ es un path local o una URL remota a un archivo con la metadata de un cat谩logo, en formato JSON o XLSX. La representaci贸n _interna_ de un cat谩logo es un diccionario.
  • catalog_id (str) 鈥 Si se especifica, se usa este identificador para el backup. Si no se especifica, se usa catalog[芦identifier禄].
  • local_catalogs_dir (str) 鈥 Directorio local en el cual se va a crear la carpeta 芦catalog/鈥β con todos los cat谩logos.
  • include_metadata (bool) 鈥 Si es verdadero, se generan los archivos data.json y catalog.xlsx.
  • include_data (bool) 鈥 Si es verdadero, se descargan todas las distribuciones de todos los cat谩logos.
  • include_datasets (list) 鈥 Si se especifica, se descargan 煤nicamente los datasets indicados. Si no, se descargan todos.
  • include_distribution_formats (list) 鈥 Si se especifica, se descargan 煤nicamente las distribuciones de los formatos indicados. Si no, se descargan todas.
  • use_short_path (bool) 鈥 No implementado. Si es verdadero, se utiliza una jerarqu铆a de directorios simplificada. Caso contrario, se replica la existente en infra.
Devuelve:

None

make_catalogs_backup(catalogs=None, local_catalogs_dir=u'.', copy_metadata=True, copy_data=True)[fuente]

Realiza copia de los datos y metadatos de uno o m谩s cat谩logos.

Par谩metros:
  • catalogs (list or dict) 鈥 Lista de cat谩logos (elementos que pueden ser interpretados por DataJson como cat谩logos) o diccionario donde las keys se interpretan como los catalog_identifier: { 芦modernizacion禄: 芦http://infra.datos.gob.ar/catalog/modernizacion/data.json禄 } Cuando es una lista, los ids se toman de catalog_identifer, y se ignoran los cat谩logos que no tengan catalog_identifier. Cuando se pasa un diccionario, los keys reemplazan a los catalog_identifier (estos no se leeen).
  • local_catalogs_dir (str) 鈥 Directorio local en el cual se va a crear la carpeta 芦catalog/鈥β con todos los cat谩logos.
  • copy_metadata (bool) 鈥 Si es verdadero, se generan los archivos data.json y catalog.xlsx.
  • copy_data (bool) 鈥 Si es verdadero, se descargan todas las distribuciones de todos los cat谩logos.
Devuelve:

None

push_dataset_to_ckan(owner_org, dataset_origin_identifier, portal_url, apikey, catalog_id=None, demote_superThemes=True, demote_themes=True, download_strategy=None, generate_new_access_url=None, origin_tz='America/Buenos_Aires', dst_tz='America/Buenos_Aires')

Escribe la metadata de un dataset en el portal pasado por par谩metro.

Par谩metros:
  • catalog (DataJson) 鈥 El cat谩logo de origen que contiene el dataset.
  • owner_org (str) 鈥 La organizaci贸n a la cual pertence el dataset.
  • dataset_origin_identifier (str) 鈥 El id del dataset que se va a federar.
  • portal_url (str) 鈥 La URL del portal CKAN de destino.
  • apikey (str) 鈥 La apikey de un usuario con los permisos que le permitan crear o actualizar el dataset.
  • catalog_id (str or None) 鈥 El prefijo con el que va a preceder el id del dataset en cat谩logo destino.
  • demote_superThemes (bool) 鈥 Si est谩 en true, los ids de los super themes del dataset, se propagan como grupo.
  • demote_themes (bool) 鈥 Si est谩 en true, los labels de los themes del dataset, pasan a ser tags. Sino, se pasan como grupo.
  • download_strategy (callable) 鈥 Una funci贸n (cat谩logo, distribuci贸n)-> bool. Sobre las distribuciones que eval煤a True, descarga el recurso en el downloadURL y lo sube al portal de destino. Por default no sube ninguna distribuci贸n.
  • generate_new_access_url (list) 鈥 Se pasan los ids de las distribuciones cuyo accessURL se regenerar en el portal de destino. Para el resto, el portal debe mantiene el valor pasado en el DataJson.
  • origin_tz (str) 鈥 Timezone de origen, un string (EJ: Africa/Bamako) el cual identifica el timezone del emisor del DataJson.
  • dst_tz (str) 鈥 Timezone de destino, un string (EJ: Antarctica/Palmer) el cual identifica el timezone del receptor del DataJson, comunmente el timezone del servidor.
Devuelve:

El id del dataset en el cat谩logo de destino.

Tipo del valor devuelto:
 

str

push_new_themes(portal_url, apikey)

Toma un cat谩logo y escribe los temas de la taxonom铆a que no est谩n presentes.

Args:
catalog (DataJson): El cat谩logo de origen que contiene la
taxonom铆a.

portal_url (str): La URL del portal CKAN de destino. apikey (str): La apikey de un usuario con los permisos que le

permitan crear o actualizar los temas.
Returns:
str: Los ids de los temas creados.
push_theme_to_ckan(portal_url, apikey, identifier=None, label=None)

Escribe la metadata de un theme en el portal pasado por par谩metro.

Par谩metros:
  • catalog (DataJson) 鈥 El cat谩logo de origen que contiene el theme.
  • portal_url (str) 鈥 La URL del portal CKAN de destino.
  • apikey (str) 鈥 La apikey de un usuario con los permisos que le permitan crear o actualizar el dataset.
  • identifier (str) 鈥 El identificador para buscar el theme en la taxonomia.
  • label (str) 鈥 El label para buscar el theme en la taxonomia.
Devuelve:

El name del theme en el cat谩logo de destino.

Tipo del valor devuelto:
 

str

restore_catalog_to_ckan(origin_portal_url, destination_portal_url, apikey, download_strategy=None, generate_new_access_url=None, origin_tz='America/Buenos_Aires', dst_tz='America/Buenos_Aires')

Restaura los datasets de un cat谩logo original al portal pasado por par谩metro. Si hay temas presentes en el DataJson que no est谩n en el portal de CKAN, los genera.

Args:

catalog (DataJson): El cat谩logo de origen que se restaura. origin_portal_url (str): La URL del portal CKAN de origen. destination_portal_url (str): La URL del portal CKAN de

destino.
apikey (str): La apikey de un usuario con los permisos que le
permitan crear o actualizar el dataset.
download_strategy(callable): Una funci贸n
(cat谩logo, distribuci贸n)-> bool. Sobre las distribuciones que eval煤a True, descarga el recurso en el downloadURL y lo sube al portal de destino. Por default no sube ninguna distribuci贸n.
generate_new_access_url(list): Se pasan los ids de las
distribuciones cuyo accessURL se regenerar en el portal de destino. Para el resto, el portal debe mantiene el valor pasado en el DataJson.
origin_tz(str): Timezone de origen, un string
(EJ: Africa/Bamako) el cual identifica el timezone del emisor del DataJson.
dst_tz(str): Timezone de destino, un string
(EJ: Antarctica/Palmer) el cual identifica el timezone del receptor del DataJson, comunmente el timezone del servidor.
Returns:
dict: Diccionario con key organizaci贸n y value la lista de ids
de datasets subidos a esa organizaci贸n
restore_dataset_to_ckan(owner_org, dataset_origin_identifier, portal_url, apikey, download_strategy=None, generate_new_access_url=None, origin_tz='America/Buenos_Aires', dst_tz='America/Buenos_Aires')

Restaura la metadata de un dataset en el portal pasado por par谩metro.

Par谩metros:
  • catalog (DataJson) 鈥 El cat谩logo de origen que contiene el dataset.
  • owner_org (str) 鈥 La organizaci贸n a la cual pertence el dataset.
  • dataset_origin_identifier (str) 鈥 El id del dataset que se va a restaurar.
  • portal_url (str) 鈥 La URL del portal CKAN de destino.
  • apikey (str) 鈥 La apikey de un usuario con los permisos que le permitan crear o actualizar el dataset.
  • download_strategy (callable) 鈥 Una funci贸n (cat谩logo, distribuci贸n)-> bool. Sobre las distribuciones que eval煤a True, descarga el recurso en el downloadURL y lo sube al portal de destino. Por default no sube ninguna distribuci贸n.
  • generate_new_access_url (list) 鈥 Se pasan los ids de las distribuciones cuyo accessURL se regenerar en el portal de destino. Para el resto, el portal debe mantiene el valor pasado en el DataJson.
  • origin_tz (str) 鈥 Timezone de origen, un string (EJ: Africa/Bamako) el cual identifica el timezone del emisor del DataJson.
  • dst_tz (str) 鈥 Timezone de destino, un string (EJ: Antarctica/Palmer) el cual identifica el timezone del receptor del DataJson, comunmente el timezone del servidor.
Devuelve:

El id del dataset restaurado.

Tipo del valor devuelto:
 

str

restore_organization_to_ckan(owner_org, portal_url, apikey, dataset_list=None, download_strategy=None, generate_new_access_url=None, origin_tz='America/Buenos_Aires', dst_tz='America/Buenos_Aires')

Restaura los datasets de la organizaci贸n de un cat谩logo al portal pasado por par谩metro. Si hay temas presentes en el DataJson que no est谩n en el portal de CKAN, los genera.

Args:

catalog (DataJson): El cat谩logo de origen que se restaura. portal_url (str): La URL del portal CKAN de destino. apikey (str): La apikey de un usuario con los permisos que le

permitan crear o actualizar el dataset.
dataset_list(list(str)): Los ids de los datasets a restaurar. Si no
se pasa una lista, todos los datasests se restauran.

owner_org (str): La organizaci贸n a la cual pertencen los datasets. download_strategy(callable): Una funci贸n (cat谩logo, distribuci贸n)->

bool. Sobre las distribuciones que eval煤a True, descarga el recurso en el downloadURL y lo sube al portal de destino. Por default no sube ninguna distribuci贸n.
generate_new_access_url(list): Se pasan los ids de las
distribuciones cuyo accessURL se regenerar en el portal de destino. Para el resto, el portal debe mantiene el valor pasado en el DataJson.
origin_tz(str): Timezone de origen, un string (EJ: Africa/Bamako)
el cual identifica el timezone del emisor del DataJson.
dst_tz(str): Timezone de destino, un string
(EJ: Antarctica/Palmer) el cual identifica el timezone del receptor del DataJson, comunmente el timezone del servidor.
Returns:
list(str): La lista de ids de datasets subidos.
restore_organizations_to_ckan(organizations, portal_url, apikey, download_strategy=None, generate_new_access_url=None, origin_tz='America/Buenos_Aires', dst_tz='America/Buenos_Aires')

Restaura los datasets indicados para c/organizaci贸n de un cat谩logo al portal pasado. Si hay temas presentes en el DataJson que no est谩n en el portal de CKAN, los genera. Las organizaciones ya deben estar creadas.

Par谩metros:
  • catalog (DataJson) 鈥 El cat谩logo de origen que se restaura.
  • organizations (dict) 鈥 Datasets a restaurar por c/organizaci贸n donde {芦organizacion_id禄: [dataset_id1, dataset_id2, 鈥}
  • portal_url (str) 鈥 La URL del portal CKAN de destino.
  • apikey (str) 鈥 La apikey de un usuario con los permisos que le permitan crear o actualizar el dataset.
  • download_strategy (callable) 鈥 Una funci贸n (cat谩logo, distribuci贸n)-> bool. Sobre las distribuciones que eval煤a True, descarga el recurso en el downloadURL y lo sube al portal de destino. Por default no sube ninguna distribuci贸n.
  • generate_new_access_url (list) 鈥 Se pasan los ids de las distribuciones cuyo accessURL se regenerar en el portal de destino. Para el resto, el portal debe mantiene el valor pasado en el DataJson.
  • origin_tz (str) 鈥 Timezone de origen, un string (EJ: Africa/Bamako) el cual identifica el timezone del emisor del DataJson.
  • dst_tz (str) 鈥 Timezone de destino, un string (EJ: Antarctica/Palmer) el cual identifica el timezone del receptor del DataJson, comunmente el timezone del servidor.
Devuelve:

La lista de ids de datasets subidos.

Tipo del valor devuelto:
 

list(str)

themes

Devuelve la lista de temas del cat谩logo (taxonom铆a tem谩tica).

time_series

Devuelve lista de series de tiempo del cat谩logo o uno de sus metadatos.

Par谩metros:
  • catalog (dict, str or DataJson) 鈥 Representaci贸n externa/interna de un cat谩logo. Una representaci贸n _externa_ es un path local o una URL remota a un archivo con la metadata de un cat谩logo, en formato JSON o XLSX. La representaci贸n _interna_ de un cat谩logo es un diccionario. Ejemplos: http://datos.gob.ar/data.json, http://www.ign.gob.ar/descargas/geodatos/catalog.xlsx, 芦/energia/catalog.xlsx禄.
  • filter_in (dict) 鈥

    Devuelve las series cuyos atributos coinciden con los pasados en este diccionario. Ejemplo:

    {
        "dataset": {
            "publisher": {"name": "Ministerio de Ambiente"}
        }
    }
    

    S贸lo se devolver谩n las series que pertenezcan a un dataset de ese publisher_name.

  • filter_out (dict) 鈥

    Devuelve las series cuyos atributos no coinciden con los pasados en este diccionario. Ejemplo:

    {
        "dataset": {
            "publisher": {"name": "Ministerio de Ambiente"}
        }
    }
    

    S贸lo se devolver谩n las series que no pertenezcan a un dataset de ese publisher_name.

  • meta_field (str) 鈥 Nombre de un metadato de Field. En lugar de devolver los objetos completos 芦Field禄, devuelve una lista de valores para ese metadato presentes en el cat谩logo.
  • exclude_meta_fields (list) 鈥 Metadatos de Field que se quieren excluir de los objetos Field devueltos.
to_json(path)

Escribe el cat谩logo en JSON.

Par谩metros:
  • catalog (DataJson) 鈥 Cat谩logo de datos.
  • path (str) 鈥 Directorio absoluto donde se crea el archivo XLSX.
to_xlsx(path, xlsx_fields=None)

Escribe el cat谩logo en Excel.

Par谩metros:
  • catalog (DataJson) 鈥 Cat谩logo de datos.
  • path (str) 鈥 Directorio absoluto donde se crea el archivo XLSX.
  • xlsx_fields (dict) 鈥 Orden en que los campos del perfil de metadatos se escriben en cada hoja del Excel.
validate_catalog(catalog=None, only_errors=False, fmt=u'dict', export_path=None)[fuente]

Analiza un data.json registrando los errores que encuentra.

Chequea que el data.json tiene todos los campos obligatorios y que tanto los campos obligatorios como los opcionales siguen la estructura definida en el schema.

Par谩metros:
  • catalog (str o dict) 鈥 Cat谩logo (dict, JSON o XLSX) a ser validado. Si no se pasa, valida este cat谩logo.
  • only_errors (bool) 鈥 Si es True s贸lo se reportan los errores.
  • fmt (str) 鈥

    Indica el formato en el que se desea el reporte. 芦dict禄 es el reporte m谩s verborr谩gico respetando la

    estructura del data.json.
    禄list禄 devuelve un dict con listas de errores formateados para
    generar tablas.
  • export_path (str) 鈥 Path donde exportar el reporte generado (en formato XLSX o CSV). Si se especifica, el m茅todo no devolver谩 nada, a pesar de que se pase alg煤n argumento en fmt.
Devuelve:

Diccionario resumen de los errores encontrados:

{
    "status": "OK",  # resultado de la validaci贸n global
    "error": {
        "catalog": {
            "status": "OK",
            "errors": []
            "title": "T铆tulo Catalog"},
        "dataset": [
            {
                "status": "OK",
                "errors": [],
                "title": "Titulo Dataset 1"
            },
            {
                "status": "ERROR",
                "errors": [error1_info, error2_info, ...],
                "title": "Titulo Dataset 2"
            }
        ]
    }
}

Donde errorN_info es un dict con la informaci贸n del N-茅simo error encontrado, con las siguientes claves: 芦path禄, 芦instance禄, 芦message禄, 芦validator禄, 芦validator_value禄, 芦error_code禄.

Tipo del valor devuelto:
 

dict

pydatajson.core.main()[fuente]

Permite ejecutar el m贸dulo por l铆nea de comandos.

Valida un path o url a un archivo data.json devolviendo True/False si es v谩lido y luego el resultado completo.

Example

python pydatajson.py http://181.209.63.71/data.json python pydatajson.py ~/github/pydatajson/tests/samples/full_data.json

Lectura

M贸dulo 鈥渞eaders鈥 de Pydatajson

Contiene los m茅todos auxiliares para leer archivos con informaci贸n tabular y cat谩logos de metadatos, en distintos fomatos.

pydatajson.readers.read_catalog(catalog, default_values=None, catalog_format=None, verify=False, timeout=30)[fuente]

Toma una representaci贸n cualquiera de un cat谩logo, y devuelve su representaci贸n interna (un diccionario de Python con su metadata.)

Si recibe una representaci贸n _interna_ (un diccionario), lo devuelve intacto. Si recibe una representaci贸n _externa_ (path/URL a un archivo JSON/XLSX), devuelve su represetaci贸n interna, es decir, un diccionario.

Par谩metros:catalog (dict or str) 鈥 Representaci贸n externa/interna de un cat谩logo. Una representaci贸n _externa_ es un path local o una URL remota a un archivo con la metadata de un cat谩logo, en formato JSON o XLSX. La representaci贸n _interna_ de un cat谩logo es un diccionario.
Devuelve:Representaci贸n interna de un cat谩logo para uso en las funciones de esta librer铆a.
Tipo del valor devuelto:
 dict
pydatajson.readers.read_json(json_path_or_url, verify=False, timeout=30)[fuente]

Toma el path a un JSON y devuelve el diccionario que representa.

Se asume que el par谩metro es una URL si comienza con 鈥渉ttp鈥 o 鈥渉ttps鈥, o un path local de lo contrario.

Par谩metros:json_path_or_url (str) 鈥 Path local o URL remota a un archivo de texto plano en formato JSON.
Devuelve:El diccionario que resulta de deserializar json_path_or_url.
Tipo del valor devuelto:
 dict
pydatajson.readers.read_local_xlsx_catalog(xlsx_path, logger=None)[fuente]

Genera un diccionario de metadatos de cat谩logo a partir de un XLSX bien formado.

Par谩metros:xlsx_path (str) 鈥 Path a un archivo XLSX 芦template禄 para describir la metadata de un cat谩logo.
Devuelve:Diccionario con los metadatos de un cat谩logo.
Tipo del valor devuelto:
 dict
pydatajson.readers.read_table(path)[fuente]

Lee un archivo tabular (CSV o XLSX) a una lista de diccionarios.

La extensi贸n del archivo debe ser 芦.csv禄 o 芦.xlsx禄. En funci贸n de ella se decidir谩 el m茅todo a usar para leerlo.

Si recibe una lista, comprueba que todos sus diccionarios tengan las mismas claves y de ser as铆, la devuelve intacta. Levanta una Excepci贸n en caso contrario.

Par谩metros:path (str o list) 鈥 Como 鈥渟tr鈥, path a un archivo CSV o XLSX.
Devuelve:Lista de diccionarios con claves id茅nticas representando el archivo original.
Tipo del valor devuelto:
 list
pydatajson.readers.read_xlsx_catalog(xlsx_path_or_url, logger=None, verify=False, timeout=30)[fuente]

Toma el path a un cat谩logo en formato XLSX y devuelve el diccionario que representa.

Se asume que el par谩metro es una URL si comienza con 鈥渉ttp鈥 o 鈥渉ttps鈥, o un path local de lo contrario.

Par谩metros:xlsx_path_or_url (str) 鈥 Path local o URL remota a un libro XLSX de formato espec铆fico para guardar los metadatos de un cat谩logo.
Devuelve:El diccionario que resulta de procesar xlsx_path_or_url.
Tipo del valor devuelto:
 dict

Escritura

M贸dulo 鈥渨riters鈥 de pydatajson

Contiene los m茅todos para escribir - diccionarios con metadatos de cat谩logos a formato JSON, as铆 como - listas de diccionarios (芦tablas禄) en formato CSV o XLSX

pydatajson.writers.write_json(obj, path)[fuente]

Escribo un objeto a un archivo JSON con codificaci贸n UTF-8.

pydatajson.writers.write_json_catalog(catalog, path)[fuente]

Escribe el cat谩logo en JSON.

Par谩metros:
  • catalog (DataJson) 鈥 Cat谩logo de datos.
  • path (str) 鈥 Directorio absoluto donde se crea el archivo XLSX.
pydatajson.writers.write_table(table, path, column_styles=None, cell_styles=None)[fuente]

Exporta una tabla en el formato deseado (CSV o XLSX).

La extensi贸n del archivo debe ser 芦.csv禄 o 芦.xlsx禄, y en funci贸n de ella se decidir谩 qu茅 m茅todo usar para escribirlo.

Par谩metros:
  • table (list of dicts) 鈥 Tabla a ser exportada.
  • path (str) 鈥 Path al archivo CSV o XLSX de exportaci贸n.
pydatajson.writers.write_tables(tables, path, column_styles=None, cell_styles=None, tables_fields=None, tables_names=None)[fuente]

Exporta un reporte con varias tablas en CSV o XLSX.

Si la extensi贸n es 芦.csv禄 se crean varias tablas agregando el nombre de la tabla al final del 芦path禄. Si la extensi贸n es 芦.xlsx禄 todas las tablas se escriben en el mismo excel.

Par谩metros:
  • table (dict of (list of dicts)) 鈥

    Conjunto de tablas a ser exportadas donde {

    禄table_name禄: [{
    芦field_name1禄: 芦field_value1禄, 芦field_name2禄: 芦field_value2禄, 芦field_name3禄: 芦field_value3禄

    }]

    }

  • path (str) 鈥 Path al archivo CSV o XLSX de exportaci贸n.
pydatajson.writers.write_xlsx_catalog(catalog, path, xlsx_fields=None)[fuente]

Escribe el cat谩logo en Excel.

Par谩metros:
  • catalog (DataJson) 鈥 Cat谩logo de datos.
  • path (str) 鈥 Directorio absoluto donde se crea el archivo XLSX.
  • xlsx_fields (dict) 鈥 Orden en que los campos del perfil de metadatos se escriben en cada hoja del Excel.

Validaci贸n

M贸dulo 鈥渧alidator鈥 de Pydatajson

Contiene los m茅todos para validar el perfil de metadatos de un cat谩logo.

pydatajson.validation.is_valid_catalog(catalog, validator=None)[fuente]

Valida que un archivo data.json cumpla con el schema definido.

Chequea que el data.json tiene todos los campos obligatorios y que tanto los campos obligatorios como los opcionales siguen la estructura definida en el schema.

Par谩metros:catalog (str o dict) 鈥 Cat谩logo (dict, JSON o XLSX) a ser validado.
Devuelve:True si el data.json cumple con el schema, sino False.
Tipo del valor devuelto:
 bool
pydatajson.validation.validate_catalog(catalog, only_errors=False, fmt=u'dict', export_path=None, validator=None)[fuente]

Analiza un data.json registrando los errores que encuentra.

Chequea que el data.json tiene todos los campos obligatorios y que tanto los campos obligatorios como los opcionales siguen la estructura definida en el schema.

Par谩metros:
  • catalog (str o dict) 鈥 Cat谩logo (dict, JSON o XLSX) a ser validado.
  • only_errors (bool) 鈥 Si es True s贸lo se reportan los errores.
  • fmt (str) 鈥

    Indica el formato en el que se desea el reporte. 芦dict禄 es el reporte m谩s verborr谩gico respetando la

    estructura del data.json.
    禄list禄 devuelve un dict con listas de errores formateados para
    generar tablas.
  • export_path (str) 鈥 Path donde exportar el reporte generado (en formato XLSX o CSV). Si se especifica, el m茅todo no devolver谩 nada, a pesar de que se pase alg煤n argumento en fmt.
Devuelve:

Diccionario resumen de los errores encontrados:

{
    "status": "OK",  # resultado de la validaci贸n global
    "error": {
        "catalog": {
            "status": "OK",
            "errors": []
            "title": "T铆tulo Catalog"},
        "dataset": [
            {
                "status": "OK",
                "errors": [],
                "title": "Titulo Dataset 1"
            },
            {
                "status": "ERROR",
                "errors": [error1_info, error2_info, ...],
                "title": "Titulo Dataset 2"
            }
        ]
    }
}

Donde errorN_info es un dict con la informaci贸n del N-茅simo error encontrado, con las siguientes claves: 芦path禄, 芦instance禄, 芦message禄, 芦validator禄, 芦validator_value禄, 芦error_code禄.

Tipo del valor devuelto:
 

dict

B煤squeda

M贸dulo 鈥渟earch鈥 de Pydatajson

Contiene los m茅todos para navegar un data.json iterando y buscando entidades de un cat谩logo.

pydatajson.search.get_catalog_metadata(catalog, exclude_meta_fields=None)[fuente]

Devuelve s贸lo la metadata de nivel cat谩logo.

pydatajson.search.get_dataset(catalog, identifier=None, title=None)[fuente]

Devuelve un Dataset del cat谩logo.

pydatajson.search.get_datasets(catalog, filter_in=None, filter_out=None, meta_field=None, exclude_meta_fields=None, only_time_series=False)[fuente]

Devuelve una lista de datasets del cat谩logo o de uno de sus metadatos.

Par谩metros:
  • catalog (dict, str or DataJson) 鈥 Representaci贸n externa/interna de un cat谩logo. Una representaci贸n _externa_ es un path local o una URL remota a un archivo con la metadata de un cat谩logo, en formato JSON o XLSX. La representaci贸n _interna_ de un cat谩logo es un diccionario. Ejemplos: http://datos.gob.ar/data.json, http://www.ign.gob.ar/descargas/geodatos/catalog.xlsx, 芦/energia/catalog.xlsx禄.
  • filter_in (dict) 鈥

    Devuelve los datasets cuyos atributos coinciden con los pasados en este diccionario. Ejemplo:

    {
        "dataset": {
            "publisher": {"name": "Ministerio de Ambiente"}
        }
    }
    

    S贸lo se devolver谩n los datasets de ese publisher_name.

  • filter_out (dict) 鈥

    Devuelve los datasets cuyos atributos no coinciden con los pasados en este diccionario. Ejemplo:

    {
        "dataset": {
            "publisher": {"name": "Ministerio de Ambiente"}
        }
    }
    

    S贸lo se devolver谩n los datasets que no sean de ese publisher_name.

  • meta_field (str) 鈥 Nombre de un metadato de Dataset. En lugar de devolver los objetos completos 芦Dataset禄, devuelve una lista de valores para ese metadato presentes en el cat谩logo.
  • exclude_meta_fields (list) 鈥 Metadatos de Dataset que se quieren excluir de los objetos Dataset devueltos.
  • only_time_series (bool) 鈥 Si es verdadero, s贸lo devuelve datasets que tengan por lo menos una distribuci贸n de series de tiempo.
pydatajson.search.get_distribution(catalog, identifier=None, title=None, dataset_identifier=None)[fuente]

Devuelve una Distribution del cat谩logo.

pydatajson.search.get_distributions(catalog, filter_in=None, filter_out=None, meta_field=None, exclude_meta_fields=None, only_time_series=False)[fuente]

Devuelve lista de distribuciones del cat谩logo o de uno de sus metadatos.

Par谩metros:
  • catalog (dict, str or DataJson) 鈥 Representaci贸n externa/interna de un cat谩logo. Una representaci贸n _externa_ es un path local o una URL remota a un archivo con la metadata de un cat谩logo, en formato JSON o XLSX. La representaci贸n _interna_ de un cat谩logo es un diccionario. Ejemplos: http://datos.gob.ar/data.json, http://www.ign.gob.ar/descargas/geodatos/catalog.xlsx, 芦/energia/catalog.xlsx禄.
  • filter_in (dict) 鈥

    Devuelve los distribuciones cuyos atributos coinciden con los pasados en este diccionario. Ejemplo:

    {
        "dataset": {
            "publisher": {"name": "Ministerio de Ambiente"}
        }
    }
    

    S贸lo se devolver谩n los distribuciones que pertenezcan a un dataset de ese publisher_name.

  • filter_out (dict) 鈥

    Devuelve los distribuciones cuyos atributos no coinciden con los pasados en este diccionario. Ejemplo:

    {
        "dataset": {
            "publisher": {"name": "Ministerio de Ambiente"}
        }
    }
    

    S贸lo se devolver谩n los distribuciones que no pertenezcan a un dataset de ese publisher_name.

  • meta_field (str) 鈥 Nombre de un metadato de Distribution. En lugar de devolver los objetos completos Distribution, devuelve una lista de valores para ese metadato presentes en el cat谩logo.
  • exclude_meta_fields (list) 鈥 Metadatos de Distribution que se quieren excluir de los objetos Distribution devueltos.
  • only_time_series (bool) 鈥 Si es verdadero, s贸lo devuelve distribuciones que sean distribuciones de series de tiempo.
pydatajson.search.get_field(catalog, identifier=None, title=None, distribution_identifier=None)[fuente]

Devuelve un Field del cat谩logo.

pydatajson.search.get_fields(catalog, filter_in=None, filter_out=None, meta_field=None, only_time_series=False, distribution_identifier=None)[fuente]

Devuelve lista de campos del cat谩logo o de uno de sus metadatos.

Par谩metros:
  • catalog (dict, str or DataJson) 鈥 Representaci贸n externa/interna de un cat谩logo. Una representaci贸n _externa_ es un path local o una URL remota a un archivo con la metadata de un cat谩logo, en formato JSON o XLSX. La representaci贸n _interna_ de un cat谩logo es un diccionario. Ejemplos: http://datos.gob.ar/data.json, http://www.ign.gob.ar/descargas/geodatos/catalog.xlsx, 芦/energia/catalog.xlsx禄.
  • filter_in (dict) 鈥

    Devuelve los campos cuyos atributos coinciden con los pasados en este diccionario. Ejemplo:

    {
        "dataset": {
            "publisher": {"name": "Ministerio de Ambiente"}
        }
    }
    

    S贸lo se devolver谩n los campos que pertenezcan a un dataset de ese publisher_name.

  • filter_out (dict) 鈥

    Devuelve los campos cuyos atributos no coinciden con los pasados en este diccionario. Ejemplo:

    {
        "dataset": {
            "publisher": {"name": "Ministerio de Ambiente"}
        }
    }
    

    S贸lo se devolver谩n los campos que no pertenezcan a un dataset de ese publisher_name.

  • meta_field (str) 鈥 Nombre de un metadato de Field. En lugar de devolver los objetos completos 芦Field禄, devuelve una lista de valores para ese metadato presentes en el cat谩logo.
  • exclude_meta_fields (list) 鈥 Metadatos de Field que se quieren excluir de los objetos Field devueltos.
  • only_time_series (bool) 鈥 Si es verdadero, s贸lo devuelve campos que sean series de tiempo.
pydatajson.search.get_themes(catalog)[fuente]

Devuelve la lista de temas del cat谩logo (taxonom铆a tem谩tica).

pydatajson.search.get_time_series(catalog, **kwargs)[fuente]

Devuelve lista de series de tiempo del cat谩logo o uno de sus metadatos.

Par谩metros:
  • catalog (dict, str or DataJson) 鈥 Representaci贸n externa/interna de un cat谩logo. Una representaci贸n _externa_ es un path local o una URL remota a un archivo con la metadata de un cat谩logo, en formato JSON o XLSX. La representaci贸n _interna_ de un cat谩logo es un diccionario. Ejemplos: http://datos.gob.ar/data.json, http://www.ign.gob.ar/descargas/geodatos/catalog.xlsx, 芦/energia/catalog.xlsx禄.
  • filter_in (dict) 鈥

    Devuelve las series cuyos atributos coinciden con los pasados en este diccionario. Ejemplo:

    {
        "dataset": {
            "publisher": {"name": "Ministerio de Ambiente"}
        }
    }
    

    S贸lo se devolver谩n las series que pertenezcan a un dataset de ese publisher_name.

  • filter_out (dict) 鈥

    Devuelve las series cuyos atributos no coinciden con los pasados en este diccionario. Ejemplo:

    {
        "dataset": {
            "publisher": {"name": "Ministerio de Ambiente"}
        }
    }
    

    S贸lo se devolver谩n las series que no pertenezcan a un dataset de ese publisher_name.

  • meta_field (str) 鈥 Nombre de un metadato de Field. En lugar de devolver los objetos completos 芦Field禄, devuelve una lista de valores para ese metadato presentes en el cat谩logo.
  • exclude_meta_fields (list) 鈥 Metadatos de Field que se quieren excluir de los objetos Field devueltos.

Reportes

M贸dulo 鈥渞eporting鈥 de Pydatajson

Contiene los m茅todos para generar reportes sobre un cat谩logo.

pydatajson.reporting.generate_datasets_summary(catalog, export_path=None, validator=None)[fuente]

Genera un informe sobre los datasets presentes en un cat谩logo, indicando para cada uno:

  • 脥ndice en la lista catalog[芦dataset禄]
  • T铆tulo
  • Identificador
  • Cantidad de distribuciones
  • Estado de sus metadatos [芦OK禄|禄ERROR禄]

Es utilizada por la rutina diaria de libreria-catalogos para reportar sobre los datasets de los cat谩logos mantenidos.

Par谩metros:
  • catalog (str o dict) 鈥 Path a un cat谩logo en cualquier formato, JSON, XLSX, o diccionario de python.
  • export_path (str) 鈥 Path donde exportar el informe generado (en formato XLSX o CSV). Si se especifica, el m茅todo no devolver谩 nada.
Devuelve:

Contiene tantos dicts como datasets est茅n presentes en catalogs, con los datos antes mencionados.

Tipo del valor devuelto:
 

list

Federaci贸n

Extensi贸n de pydatajson para la federaci贸n de metadatos de datasets a trav茅s de la API de CKAN.

pydatajson.federation.get_organization_from_ckan(portal_url, org_id, verify_ssl=False, requests_timeout=30)[fuente]

Toma la url de un portal y un id, y devuelve la organizaci贸n a buscar.

Par谩metros:
  • portal_url (str) 鈥 La URL del portal CKAN de origen.
  • org_id (str) 鈥 El id de la organizaci贸n a buscar.
  • verify_ssl (bool) 鈥 Verificar certificados SSL
  • requests_timeout (int) 鈥 cantidad en segundos para timeoutear un request al server.
Devuelve:

Diccionario con la informaci贸n de la organizaci贸n.

Tipo del valor devuelto:
 

dict

pydatajson.federation.get_organizations_from_ckan(portal_url, verify_ssl=False, requests_timeout=30)[fuente]

Toma la url de un portal y devuelve su 谩rbol de organizaciones.

Par谩metros:
  • portal_url (str) 鈥 La URL del portal CKAN de origen.
  • verify_ssl (bool) 鈥 Verificar certificados SSL
  • requests_timeout (int) 鈥 cantidad en segundos para timeoutear un request al server.
Devuelve:

Lista de diccionarios anidados con la informaci贸n de las organizaciones.

Tipo del valor devuelto:
 

list

pydatajson.federation.harvest_catalog_to_ckan(catalog, portal_url, apikey, catalog_id, dataset_list=None, owner_org=None, download_strategy=None, origin_tz='America/Buenos_Aires', dst_tz='America/Buenos_Aires')[fuente]

Federa los datasets de un cat谩logo al portal pasado por par谩metro.

Par谩metros:
  • catalog (DataJson) 鈥 El cat谩logo de origen que se federa.
  • portal_url (str) 鈥 La URL del portal CKAN de destino.
  • apikey (str) 鈥 La apikey de un usuario con los permisos que le permitan crear o actualizar el dataset.
  • catalog_id (str) 鈥 El prefijo con el que va a preceder el id del dataset en cat谩logo destino.
  • dataset_list (list(str)) 鈥 Los ids de los datasets a federar. Si no se pasa una lista, todos los datasests se federan.
  • owner_org (str) 鈥 La organizaci贸n a la cual pertencen los datasets. Si no se pasa, se utiliza el catalog_id.
  • download_strategy (callable) 鈥 Una funci贸n (cat谩logo, distribuci贸n)-> bool. Sobre las distribuciones que eval煤a True, descarga el recurso en el downloadURL y lo sube al portal de destino. Por default no sube ninguna distribuci贸n.
  • origin_tz (str) 鈥 Timezone de origen, un string (EJ: Africa/Bamako) el cual identifica el timezone del emisor del DataJson.
  • dst_tz (str) 鈥 Timezone de destino, un string (EJ: Antarctica/Palmer) el cual identifica el timezone del receptor del DataJson, comunmente el timezone del servidor.
Devuelve:

El id del dataset en el cat谩logo de destino.

Tipo del valor devuelto:
 

str

pydatajson.federation.harvest_dataset_to_ckan(catalog, owner_org, dataset_origin_identifier, portal_url, apikey, catalog_id, download_strategy=None, origin_tz='America/Buenos_Aires', dst_tz='America/Buenos_Aires')[fuente]

Federa la metadata de un dataset en el portal pasado por par谩metro.

Par谩metros:
  • catalog (DataJson) 鈥 El cat谩logo de origen que contiene el dataset.
  • owner_org (str) 鈥 La organizaci贸n a la cual pertence el dataset.
  • dataset_origin_identifier (str) 鈥 El id del dataset que se va a restaurar.
  • portal_url (str) 鈥 La URL del portal CKAN de destino.
  • apikey (str) 鈥 La apikey de un usuario con los permisos que le permitan crear o actualizar el dataset.
  • catalog_id (str) 鈥 El id que prependea al dataset y recursos
  • download_strategy (callable) 鈥 Una funci贸n (cat谩logo, distribuci贸n)-> bool. Sobre las distribuciones que eval煤a True, descarga el recurso en el downloadURL y lo sube al portal de destino. Por default no sube ninguna distribuci贸n.
  • origin_tz (str) 鈥 Timezone de origen, un string (EJ: Africa/Bamako) el cual identifica el timezone del emisor del DataJson.
  • dst_tz (str) 鈥 Timezone de destino, un string (EJ: Antarctica/Palmer) el cual identifica el timezone del receptor del DataJson, comunmente el timezone del servidor.
Devuelve:

El id del dataset restaurado.

Tipo del valor devuelto:
 

str

pydatajson.federation.push_dataset_to_ckan(catalog, owner_org, dataset_origin_identifier, portal_url, apikey, catalog_id=None, demote_superThemes=True, demote_themes=True, download_strategy=None, generate_new_access_url=None, origin_tz='America/Buenos_Aires', dst_tz='America/Buenos_Aires')[fuente]

Escribe la metadata de un dataset en el portal pasado por par谩metro.

Par谩metros:
  • catalog (DataJson) 鈥 El cat谩logo de origen que contiene el dataset.
  • owner_org (str) 鈥 La organizaci贸n a la cual pertence el dataset.
  • dataset_origin_identifier (str) 鈥 El id del dataset que se va a federar.
  • portal_url (str) 鈥 La URL del portal CKAN de destino.
  • apikey (str) 鈥 La apikey de un usuario con los permisos que le permitan crear o actualizar el dataset.
  • catalog_id (str or None) 鈥 El prefijo con el que va a preceder el id del dataset en cat谩logo destino.
  • demote_superThemes (bool) 鈥 Si est谩 en true, los ids de los super themes del dataset, se propagan como grupo.
  • demote_themes (bool) 鈥 Si est谩 en true, los labels de los themes del dataset, pasan a ser tags. Sino, se pasan como grupo.
  • download_strategy (callable) 鈥 Una funci贸n (cat谩logo, distribuci贸n)-> bool. Sobre las distribuciones que eval煤a True, descarga el recurso en el downloadURL y lo sube al portal de destino. Por default no sube ninguna distribuci贸n.
  • generate_new_access_url (list) 鈥 Se pasan los ids de las distribuciones cuyo accessURL se regenerar en el portal de destino. Para el resto, el portal debe mantiene el valor pasado en el DataJson.
  • origin_tz (str) 鈥 Timezone de origen, un string (EJ: Africa/Bamako) el cual identifica el timezone del emisor del DataJson.
  • dst_tz (str) 鈥 Timezone de destino, un string (EJ: Antarctica/Palmer) el cual identifica el timezone del receptor del DataJson, comunmente el timezone del servidor.
Devuelve:

El id del dataset en el cat谩logo de destino.

Tipo del valor devuelto:
 

str

pydatajson.federation.push_new_themes(catalog, portal_url, apikey)[fuente]

Toma un cat谩logo y escribe los temas de la taxonom铆a que no est谩n presentes.

Args:
catalog (DataJson): El cat谩logo de origen que contiene la
taxonom铆a.

portal_url (str): La URL del portal CKAN de destino. apikey (str): La apikey de un usuario con los permisos que le

permitan crear o actualizar los temas.
Returns:
str: Los ids de los temas creados.
pydatajson.federation.push_organization_to_ckan(portal_url, apikey, organization, parent=None, verify_ssl=False, requests_timeout=30)[fuente]

Toma una organizaci贸n y la crea en el portal de destino. :param portal_url: La URL del portal CKAN de destino. :type portal_url: str :param apikey: La apikey de un usuario con los permisos que le

permitan crear la organizaci贸n.
Par谩metros:
  • organization (dict) 鈥 Datos de la organizaci贸n a crear.
  • parent (str) 鈥 Campo name de la organizaci贸n padre.
  • verify_ssl (bool) 鈥 Verificar certificados SSL
  • requests_timeout (int) 鈥 cantidad en segundos para timeoutear un request al server.
Devuelve:

Devuelve el diccionario de la organizacion enviada,

junto con el status detallando si la creaci贸n fue exitosa o no.

Tipo del valor devuelto:
 

(dict)

pydatajson.federation.push_organization_tree_to_ckan(portal_url, apikey, org_tree, parent=None)[fuente]

Toma un 谩rbol de organizaciones y lo replica en el portal de destino.

Args:

portal_url (str): La URL del portal CKAN de destino. apikey (str): La apikey de un usuario con los permisos que le

permitan crear las organizaciones.
org_tree(list): lista de diccionarios con la data de las
organizaciones a crear.

parent(str): campo name de la organizacion padre.

Returns:
(list): Devuelve el arbol de organizaciones recorridas,
junto con el status detallando si la creaci贸n fue exitosa o no.
pydatajson.federation.push_theme_to_ckan(catalog, portal_url, apikey, identifier=None, label=None)[fuente]

Escribe la metadata de un theme en el portal pasado por par谩metro.

Par谩metros:
  • catalog (DataJson) 鈥 El cat谩logo de origen que contiene el theme.
  • portal_url (str) 鈥 La URL del portal CKAN de destino.
  • apikey (str) 鈥 La apikey de un usuario con los permisos que le permitan crear o actualizar el dataset.
  • identifier (str) 鈥 El identificador para buscar el theme en la taxonomia.
  • label (str) 鈥 El label para buscar el theme en la taxonomia.
Devuelve:

El name del theme en el cat谩logo de destino.

Tipo del valor devuelto:
 

str

pydatajson.federation.remove_datasets_from_ckan(portal_url, apikey, filter_in=None, filter_out=None, only_time_series=False, organization=None, verify_ssl=False, requests_timeout=30)[fuente]

Borra un dataset en el portal pasado por par谩metro.

Par谩metros:
  • portal_url (str) 鈥 La URL del portal CKAN de destino.
  • apikey (str) 鈥 La apikey de un usuario con los permisos que le permitan borrar el dataset.
  • filter_in (dict) 鈥 Diccionario de filtrado positivo, similar al de search.get_datasets.
  • filter_out (dict) 鈥 Diccionario de filtrado negativo, similar al de search.get_datasets.
  • only_time_series (bool) 鈥 Filtrar solo los datasets que tengan recursos con series de tiempo.
  • organization (str) 鈥 Filtrar solo los datasets que pertenezcan a cierta organizacion.
  • verify_ssl (bool) 鈥 Verificar certificados SSL
  • requests_timeout (int) 鈥 cantidad en segundos para timeoutear un
  • al server. (request) 鈥
Devuelve:

None

pydatajson.federation.remove_organization_from_ckan(portal_url, apikey, organization_id, verify_ssl=False, requests_timeout=30)[fuente]

Toma un id de organizaci贸n y la purga del portal de destino. :param portal_url: La URL del portal CKAN de destino. :type portal_url: str :param apikey: La apikey de un usuario con los permisos que le

permitan borrar la organizaci贸n.
Par谩metros:
  • organization_id (str) 鈥 Id o name de la organizaci贸n a borrar.
  • verify_ssl (bool) 鈥 Verificar certificados SSL
  • requests_timeout (int) 鈥 cantidad en segundos para timeoutear un request al server.
Devuelve:

None.

pydatajson.federation.remove_organizations_from_ckan(portal_url, apikey, organization_list)[fuente]

Toma una lista de ids de organizaci贸n y las purga del portal de destino. :param portal_url: La URL del portal CKAN de destino. :type portal_url: str :param apikey: La apikey de un usuario con los permisos que le

permitan borrar la organizaci贸n.
Par谩metros:organization_list (list) 鈥 Id o name de las organizaciones a borrar.
Devuelve:None.
pydatajson.federation.resources_update(portal_url, apikey, distributions, resource_files, generate_new_access_url=None, catalog_id=None, verify_ssl=False, requests_timeout=30)[fuente]

Sube archivos locales a sus distribuciones correspondientes en el portal pasado por par谩metro.

Args:

portal_url (str): La URL del portal CKAN de destino. apikey (str): La apikey de un usuario con los permisos que le

permitan crear o actualizar el dataset.
distributions(list): Lista de distribuciones posibles para
actualizar.
resource_files(dict): Diccionario con entradas
id_de_distribucion:path_al_recurso a subir
generate_new_access_url(list): Lista de ids de distribuciones a
las cuales se actualizar谩 el accessURL con los valores generados por el portal de destino
catalog_id(str): prependea el id al id del recurso para
encontrarlo antes de subirlo

verify_ssl(bool): Verificar certificados SSL requests_timeout(int): cantidad en segundos para timeoutear un request al server.

Returns:
list: los ids de los recursos modificados
pydatajson.federation.restore_catalog_to_ckan(catalog, origin_portal_url, destination_portal_url, apikey, download_strategy=None, generate_new_access_url=None, origin_tz='America/Buenos_Aires', dst_tz='America/Buenos_Aires')[fuente]

Restaura los datasets de un cat谩logo original al portal pasado por par谩metro. Si hay temas presentes en el DataJson que no est谩n en el portal de CKAN, los genera.

Args:

catalog (DataJson): El cat谩logo de origen que se restaura. origin_portal_url (str): La URL del portal CKAN de origen. destination_portal_url (str): La URL del portal CKAN de

destino.
apikey (str): La apikey de un usuario con los permisos que le
permitan crear o actualizar el dataset.
download_strategy(callable): Una funci贸n
(cat谩logo, distribuci贸n)-> bool. Sobre las distribuciones que eval煤a True, descarga el recurso en el downloadURL y lo sube al portal de destino. Por default no sube ninguna distribuci贸n.
generate_new_access_url(list): Se pasan los ids de las
distribuciones cuyo accessURL se regenerar en el portal de destino. Para el resto, el portal debe mantiene el valor pasado en el DataJson.
origin_tz(str): Timezone de origen, un string
(EJ: Africa/Bamako) el cual identifica el timezone del emisor del DataJson.
dst_tz(str): Timezone de destino, un string
(EJ: Antarctica/Palmer) el cual identifica el timezone del receptor del DataJson, comunmente el timezone del servidor.
Returns:
dict: Diccionario con key organizaci贸n y value la lista de ids
de datasets subidos a esa organizaci贸n
pydatajson.federation.restore_dataset_to_ckan(catalog, owner_org, dataset_origin_identifier, portal_url, apikey, download_strategy=None, generate_new_access_url=None, origin_tz='America/Buenos_Aires', dst_tz='America/Buenos_Aires')[fuente]

Restaura la metadata de un dataset en el portal pasado por par谩metro.

Par谩metros:
  • catalog (DataJson) 鈥 El cat谩logo de origen que contiene el dataset.
  • owner_org (str) 鈥 La organizaci贸n a la cual pertence el dataset.
  • dataset_origin_identifier (str) 鈥 El id del dataset que se va a restaurar.
  • portal_url (str) 鈥 La URL del portal CKAN de destino.
  • apikey (str) 鈥 La apikey de un usuario con los permisos que le permitan crear o actualizar el dataset.
  • download_strategy (callable) 鈥 Una funci贸n (cat谩logo, distribuci贸n)-> bool. Sobre las distribuciones que eval煤a True, descarga el recurso en el downloadURL y lo sube al portal de destino. Por default no sube ninguna distribuci贸n.
  • generate_new_access_url (list) 鈥 Se pasan los ids de las distribuciones cuyo accessURL se regenerar en el portal de destino. Para el resto, el portal debe mantiene el valor pasado en el DataJson.
  • origin_tz (str) 鈥 Timezone de origen, un string (EJ: Africa/Bamako) el cual identifica el timezone del emisor del DataJson.
  • dst_tz (str) 鈥 Timezone de destino, un string (EJ: Antarctica/Palmer) el cual identifica el timezone del receptor del DataJson, comunmente el timezone del servidor.
Devuelve:

El id del dataset restaurado.

Tipo del valor devuelto:
 

str

pydatajson.federation.restore_organization_to_ckan(catalog, owner_org, portal_url, apikey, dataset_list=None, download_strategy=None, generate_new_access_url=None, origin_tz='America/Buenos_Aires', dst_tz='America/Buenos_Aires')[fuente]

Restaura los datasets de la organizaci贸n de un cat谩logo al portal pasado por par谩metro. Si hay temas presentes en el DataJson que no est谩n en el portal de CKAN, los genera.

Args:

catalog (DataJson): El cat谩logo de origen que se restaura. portal_url (str): La URL del portal CKAN de destino. apikey (str): La apikey de un usuario con los permisos que le

permitan crear o actualizar el dataset.
dataset_list(list(str)): Los ids de los datasets a restaurar. Si no
se pasa una lista, todos los datasests se restauran.

owner_org (str): La organizaci贸n a la cual pertencen los datasets. download_strategy(callable): Una funci贸n (cat谩logo, distribuci贸n)->

bool. Sobre las distribuciones que eval煤a True, descarga el recurso en el downloadURL y lo sube al portal de destino. Por default no sube ninguna distribuci贸n.
generate_new_access_url(list): Se pasan los ids de las
distribuciones cuyo accessURL se regenerar en el portal de destino. Para el resto, el portal debe mantiene el valor pasado en el DataJson.
origin_tz(str): Timezone de origen, un string (EJ: Africa/Bamako)
el cual identifica el timezone del emisor del DataJson.
dst_tz(str): Timezone de destino, un string
(EJ: Antarctica/Palmer) el cual identifica el timezone del receptor del DataJson, comunmente el timezone del servidor.
Returns:
list(str): La lista de ids de datasets subidos.
pydatajson.federation.restore_organizations_to_ckan(catalog, organizations, portal_url, apikey, download_strategy=None, generate_new_access_url=None, origin_tz='America/Buenos_Aires', dst_tz='America/Buenos_Aires')[fuente]

Restaura los datasets indicados para c/organizaci贸n de un cat谩logo al portal pasado. Si hay temas presentes en el DataJson que no est谩n en el portal de CKAN, los genera. Las organizaciones ya deben estar creadas.

Par谩metros:
  • catalog (DataJson) 鈥 El cat谩logo de origen que se restaura.
  • organizations (dict) 鈥 Datasets a restaurar por c/organizaci贸n donde {芦organizacion_id禄: [dataset_id1, dataset_id2, 鈥}
  • portal_url (str) 鈥 La URL del portal CKAN de destino.
  • apikey (str) 鈥 La apikey de un usuario con los permisos que le permitan crear o actualizar el dataset.
  • download_strategy (callable) 鈥 Una funci贸n (cat谩logo, distribuci贸n)-> bool. Sobre las distribuciones que eval煤a True, descarga el recurso en el downloadURL y lo sube al portal de destino. Por default no sube ninguna distribuci贸n.
  • generate_new_access_url (list) 鈥 Se pasan los ids de las distribuciones cuyo accessURL se regenerar en el portal de destino. Para el resto, el portal debe mantiene el valor pasado en el DataJson.
  • origin_tz (str) 鈥 Timezone de origen, un string (EJ: Africa/Bamako) el cual identifica el timezone del emisor del DataJson.
  • dst_tz (str) 鈥 Timezone de destino, un string (EJ: Antarctica/Palmer) el cual identifica el timezone del receptor del DataJson, comunmente el timezone del servidor.
Devuelve:

La lista de ids de datasets subidos.

Tipo del valor devuelto:
 

list(str)

Backup

M贸dulo con funciones auxiliares para hacer backups de cat谩logos.

pydatajson.backup.get_catalog_path(catalog_id, catalogs_dir=u'', fmt=u'json')[fuente]

Genera el path est谩ndar de un cat谩logo en un filesystem.

pydatajson.backup.get_distribution_dir(catalog_id, dataset_id, distribution_id, catalogs_dir=u'', use_short_path=False)[fuente]

Genera el path est谩ndar de un cat谩logo en un filesystem.

pydatajson.backup.get_distribution_path(catalog_id, dataset_id, distribution_id, distribution_file_name, catalogs_dir=u'', use_short_path=False)[fuente]

Genera el path est谩ndar de un cat谩logo en un filesystem.

pydatajson.backup.main(catalogs, include_data=True, use_short_path=True)[fuente]

Permite hacer backups de uno o m谩s cat谩logos por l铆nea de comandos.

Par谩metros:catalogs (str) 鈥 Lista de cat谩logos separados por coma (URLs o paths locales) para hacer backups.
pydatajson.backup.make_catalog_backup(catalog, catalog_id=None, local_catalogs_dir=u'', include_metadata=True, include_data=True, include_datasets=None, include_distribution_formats=[u'CSV', u'XLS'], include_metadata_xlsx=True, use_short_path=False)[fuente]

Realiza una copia local de los datos y metadatos de un cat谩logo.

Par谩metros:
  • catalog (dict or str) 鈥 Representaci贸n externa/interna de un cat谩logo. Una representaci贸n _externa_ es un path local o una URL remota a un archivo con la metadata de un cat谩logo, en formato JSON o XLSX. La representaci贸n _interna_ de un cat谩logo es un diccionario.
  • catalog_id (str) 鈥 Si se especifica, se usa este identificador para el backup. Si no se especifica, se usa catalog[芦identifier禄].
  • local_catalogs_dir (str) 鈥 Directorio local en el cual se va a crear la carpeta 芦catalog/鈥β con todos los cat谩logos.
  • include_metadata (bool) 鈥 Si es verdadero, se generan los archivos data.json y catalog.xlsx.
  • include_data (bool) 鈥 Si es verdadero, se descargan todas las distribuciones de todos los cat谩logos.
  • include_datasets (list) 鈥 Si se especifica, se descargan 煤nicamente los datasets indicados. Si no, se descargan todos.
  • include_distribution_formats (list) 鈥 Si se especifica, se descargan 煤nicamente las distribuciones de los formatos indicados. Si no, se descargan todas.
  • use_short_path (bool) 鈥 No implementado. Si es verdadero, se utiliza una jerarqu铆a de directorios simplificada. Caso contrario, se replica la existente en infra.
Devuelve:

None

pydatajson.backup.make_catalogs_backup(catalogs, local_catalogs_dir=u'', include_metadata=True, include_data=True, include_metadata_xlsx=False, use_short_path=False)[fuente]

Realiza una copia local de los datos y metadatos de un cat谩logo.

Par谩metros:
  • catalogs (list or dict) 鈥

    Lista de cat谩logos (elementos que pueden ser interpretados por DataJson como cat谩logos) o diccionario donde las keys se interpretan como los catalog_identifier:

    Cuando es una lista, los ids se toman de catalog_identifer, y se ignoran los cat谩logos que no tengan catalog_identifier. Cuando se pasa un diccionario, los keys reemplazan a los catalog_identifier (estos no se leeen).

  • catalog_id (str) 鈥 Si se especifica, se usa este identificador para el backup. Si no se espedifica, se usa catalog[芦identifier禄].
  • local_catalogs_dir (str) 鈥 Directorio local en el cual se va a crear la carpeta 芦catalog/鈥β con todos los cat谩logos.
  • include_metadata (bool) 鈥 Si es verdadero, se generan los archivos data.json y catalog.xlsx.
  • include_data (bool) 鈥 Si es verdadero, se descargan todas las distribuciones de todos los cat谩logos.
Devuelve:

None

Versiones

Versiones

0.4.47 (2019-09-17)

  • Implementaci贸n de timezones para los nodos de origen y destino en una federaci贸n

0.4.46 (2019-08-16)

  • Fix a lecturas de cat谩logos XLSX en contextos concurrentes

0.4.45 (2019-08-01)

  • Subo versi贸n de python-dateutil

0.4.44 (2019-07-30)

  • Bugfix en validaci贸n de campos de mail
  • subo versi贸n de openpyxl

0.4.43 (2019-06-26)

  • Validaci贸n para ids num茅ricos en la resturaci贸n de cat谩logos.

0.4.42 (2019-06-04)

  • Agrega par谩metros verify_ssl y requests_timeout a los m茅todos de federaci贸n.

0.4.41 (2019-05-28)

  • Agrega par谩metros verify_ssl y requests_timeout a DataJson que controla el comportamiento de descarga de cat谩logos remotos.

0.4.40 (2019-05-28)

  • Refactor de validaciones. Ahora DataJson acepta un par谩metro validator_class que corre validaciones sobre el cat谩logo.

0.4.39 (2019-05-07)

  • Cambia el nivel del logging para los warnings que se logueaban bajo error

0.4.38 (2019-04-15)

  • Bugfix en la escritura de cat谩logos sin themes
  • Actualiza planilla xlsx de cat谩logo
  • La validaci贸n de datasets devuelve una lista en vez de un generador

0.4.37 (2019-04-03)

  • Permite el c谩lculo de indicadores de federaci贸n usando ids

0.4.36 (2019-03-01)

  • Cambia el c谩lculo de indicadores porcentuales para que calculen de 0 a 1
  • Bugfix para ciertos cat谩logos con sufijos no reconocidos

0.4.35 (2019-02-19)

  • Actualiza la validaci贸n para aceptar el string vac铆o como valor v谩lido
  • Marca los identificadores de distribuciones y datasets como campos requeridos

0.4.34 (2019-02-01)

  • Implementa m茅todo para tomar frecuencia de una serie de tiempo

0.4.33 (2019-01-10)

  • Cambia el kwarg dj_format por catalog_format
  • Peque帽o fix para los catalogos remotos json incorrectamente le铆dos como xlsx

0.4.32 (2019-01-08)

  • Fix al dj_format para las lecturas

0.4.31 (2019-01-08)

  • Se aceptan cat谩logos sin formato para la lectura del DataJson
  • Nuevo par谩metro para forzar la lectura de un cat谩logo en cierto formato
  • Actualizaci贸n de pyyaml

0.4.30 (2018-12-28)

  • No se validan URLs repetidas para datasets, hay casos v谩lidos donde ocurren

0.4.29 (2018-12-21)

  • M茅todo remove_organizations_from_ckan().
  • Cambia la estrategia de lectura para json sin extensi贸n.

0.4.28 (2018-12-11)

  • Parametro opcional a push_dataset_to_ckan() para regenerar accessURL de recursos.
  • Permite el c谩lculo de indicadores con cat谩logo central opcional.

0.4.27 (2018-11-23)

  • Las funcionalidades que estaban en restore_catalog_to_ckan() pasan a ser de restore_organization. restore_catalog se compone de varias llamadas a restore_organization.
  • Documentaci贸n de restore_catalog_to_ckan.

0.4.26 (2018-11-05)

  • Agrega m茅todos de manejo de organizaciones para bajar la informaci贸n o subir a un portal CKAN.
  • Fix en indicador 鈥渄atasets_con_datos_pct鈥 al calcular el porcentaje.
  • Cambio en los tests para que usen archivos temporales en lugar de crearlos en la carpeta results.

0.4.25 (2018-10-22)

  • Agrega indicador 鈥渄atasets_con_datos_cant鈥 para identificar la cantidad de datasets que tienen alguna distribuci贸n potencialmente con datos y los que no.
  • Expande la funci贸n backup.make_catalogs_backup() con argumentos opcionales para facilitar la generaci贸n de backups descargando las distribuciones.

0.4.24 (2018-10-16)

  • Cambia el valor default en el indicador datasets_frecuencias_cant.

0.4.23 (2018-10-2)

  • Se agregan HTML, PHP y RAR como formatos de datos posibles.
  • Bugfix relacionado a los valores default en el c谩lculo de indicadores.

0.4.22 (2018-09-05)

  • Agrega espacios a los caracteres permitidos en keyword.

0.4.21 (2018-08-21)

  • Tests y peque帽os bugfixes a ckan_reader.
  • Adecua el codigo a pycodestyle.
  • Fija piso de 80% de coverage para CI.

0.4.20 (2018-08-09)

  • Agrega tildes y 帽 a los caracteres permitidos en keyword.
  • Cuenta los campos faltantes como None en los indicadores.

0.4.19 (2018-08-07)

  • Validaci贸n de caracteres permitidos en los keywords.
  • Bugfix a la lectura de listas en xlsx con comas extras.
  • Bugfix en el cual se repet铆an los errores de validaci贸n si se ped铆a formato lista.

0.4.18 (2018-07-30)

  • Agrega interfaz por l铆nea de comandos para validar r谩pidamente un cat谩logo: pydatajson validation http://datos.gob.ar/data.json.
  • Validaci贸n de keywords, themes, y lenguajes vac铆os.
  • Bugfix en distribution_has_time_index para capturar excepciones en field inv谩lidos.

0.4.17 (2018-07-10)

  • Agregados 3 indicadores distribuciones_federadas, datasets_licencias_cant y distribuciones_tipos_cant.
  • harvest_catalog_to_ckan devuelve el mensaje en lugar de las representaciones de las excepciones.

0.4.16 (2018-06-19)

  • Bugfix en la escritura y lectura de cat谩logos xlsx.
  • Federar campo type en distribuciones.
  • Refactor del logging del m贸dulo. Todos los eventos se escriben en el logger pydatajson.
  • Reestructuraci贸n de la respuesta de harvest_catalog_to_ckan(), devuelve adicionalmente los datasets con errores de federaci贸n.

0.4.15 (2018-05-15)

  • Cambios en los requerimientos y setup.py para definir los environment markers de manera que soporte setuptools.

0.4.14 (2018-05-11)

  • harvest_catalog_to_ckan() atrapa todas las excepciones de un dataset y no detiene la ejecuci贸n.

0.4.13 (2018-05-06)

  • Agrega una primer interfaz sencilla por l铆nea de comandos. Cualquier m贸dulo puede ser usado como pydatajson module_name arg1 arg2 arg3 siempre que defina un m茅todo main() a nivel del m贸dulo que procese los par谩metros.

0.4.12 (2018-05-04)

  • Agrega funci贸n get_distribution_time_index() que devuelve el title del field marcado como time_index en una distribuci贸n de series de tiempo, si este lo tiene.

0.4.11 (2018-04-25)

  • Corrige bug de harvest_catalog_ot_ckan para manejar excepciones de validaci贸n de los datasets

0.4.10 (2018-04-24)

  • Mejora manejo de errores de las funciones para federar cat谩logos completos.

0.4.9 (2018-04-24)

  • Agrego funci贸n para generar ids de distribuciones en cat谩logos que nos los tienen (compatibilidad con perfil 1.0)
  • Agrega funci贸n para eliminar todos los datastets federados de un cat谩logo que se encuentren en un CKAN
  • Implemento fallback que busca un theme por identifier primero o por label despu茅s (si falla)
  • Agrego excepciones a los chequeos de formato vs. extensi贸n
  • Agrego param茅tros a la funci贸n title_to_name() para establecer una longitud m谩xima del resultado de la transformaci贸n en caracteres

0.4.8 (2018-04-18)

  • Mejoro manejo de errores de los m茅todos optimizados de b煤squeda

0.4.7 (2018-04-17)

  • Flexibiliza m茅todos de b煤squeda optimizados para aceptar data.json鈥檚 versi贸n 1.0
  • Mejora la performance de los m茅todos de b煤squeda optimizados

0.4.6 (2018-04-17)

  • Re-estructura el archivo de configuraci贸n para federaci贸n (nueva versi贸n simplificada)
  • Agrega m贸dulo para hacer backups de datos y metadatos de un cat谩logo
  • Mejora la performance de guardar cat谩logos en Excel

0.4.4 (2018-04-09)

  • Agrega wrappers para push_dataset_to_ckan()

0.4.3 (2018-03-20)

  • Mejora el manejo de themes para recrear un cat谩logo

0.4.2 (2018-03-13)

  • Agrega funciones auxiliares para la administraci贸n de un CKAN v铆a API para facilitar la administraci贸n de la federaci贸n de datasets
    • remove_dataset_to_ckan()
  • Incorpora nuevas validaciones (formatos y fileNames)
  • Agrega flags opcionales para que push_dataset_to_ckan() sea un m茅todo que transforma opcionalmente la metadata de un dataset

0.4.1 (2018-02-16)

  • datasets_equal() permite especificar los campos a tener en cuenta para la comparaci贸n, como un par谩metro.

0.4.0 (2018-02-08)

  • Incorpora m茅todos para federar un dataset de un cat谩logo a un CKAN o un Andino: push_dataset_to_ckan().
  • Actualiza validaciones y esquema de metadatos al Perfil Nacional de Metadatos versi贸n 1.1.

0.3.21 (2017-12-22)

  • Agrega soporte para Python 3.6

0.3.20 (2017-11-16)

  • Agrego m茅todo get_theme() para devolver un tema de la taxonom铆a espec铆fica del cat谩logo seg煤n su id o label.

0.3.19 (2017-10-31)

  • Agrego m茅todos de b煤squeda de series de tiempo en un cat谩logo (get_time_series()) y un par谩metro only_time_series=True or False para filtrar datasets y distribuciones en sus m茅todos de b煤squeda (get_datasets(only_time_series=True) devuelve s贸lo aquellos datasets que tengan alguna serie de tiempo).

0.3.18 (2017-10-19)

  • Agrego posibilidad de pasar un logger desde afuera a la funci贸n de lectura de cat谩logos en Excel.

0.3.15 (2017-10-09)

  • Agrega filtro por series de tiempo en get_datasets() y get_distributions(). Tienen un par谩metro only_time_series que devuelve s贸lo aquellos que tengan o sean distribuciones con series de tiempo.

0.3.12 (2017-09-21)

  • Agrega funci贸n para escribir un cat谩logo en Excel.
  • Agrega funciones para remover datasets o distribuciones de un cat谩logo.

0.3.11 (2017-09-13)

  • Incorpora par谩metro para excluir campos de metadatos en la devoluci贸n de la b煤squeda de datasets y distribuciones.

0.3.10 (2017-09-11)

  • Agregar referencia interna a los ids de las entidades padre de otras (distribuciones y fields.)

0.3.9 (2017-09-05)

  • Flexibiliza lectura de extras en ckan to datajson.
  • Flexibiliza longitud m铆nima de campos para recomendar su federaci贸n o no.
  • Agrega m茅todo para devolver los metadatos a nivel de cat谩logo.
  • Resuelve la escritura de objetos python como texto en excel.

0.3.8 (2017-08-25)

  • Agrega stop words a helpers.title_to_name()

0.3.4 (2017-08-21)

  • Agrega m茅todo para buscar la localizaci贸n de un field en un cat谩logo.

0.3.3 (2017-08-20)

  • Agrega m茅todo para convertir el t铆tulo de un dataset o distribuci贸n en un nombre normalizado para la creaci贸n de URLs.

0.3.2 (2017-08-16)

  • Ampl铆a reporte de federaci贸n en markdown.

0.3.0 (2017-08-14)

  • Agrega m茅todos para navegar un cat谩logo desde el objeto DataJson.

0.2.27 (2017-08-11)

  • Agrega validacion de que el campo superTheme s贸lo contenga ids en may煤sculas o min煤sculas de alguno de los 13 temas de la taxonom铆a tem谩tica de datos.gob.ar.
  • Agrega validaci贸n limitando a 60 caracteres los nombres de los campos field_title.
  • Mejoras al reporte de asistencia a la federaci贸n.

0.2.26 (2017-08-04)

  • Agrega validaci贸n de que no haya ids repetidos en la lista de temas de themeTaxonomy.
  • Agrega traducci贸n de ckan del campo extra Cobertura temporal a temporal.

0.2.24 (2017-08-03)

  • Mejoras en los reportes de errores y an谩lisis de datasets para federaci贸n
  • M茅todos DataJson.validate_catalog() y DataJson.generate_datasets_report() tienen nuevas opciones para mejorar los reportes, especialmente en excel.

0.2.23 (2017-08-02)

  • Bug fixes

0.2.22 (2017-08-02)

  • Agrega estilo y formato al reporte de datasets
  • Agrega nuevos campos al reporte de datasets
  • Agrega un campo identificador del cat谩logo en el archivo de configuraci贸n de federaci贸n

0.2.21 (2017-08-02)

  • Tolera el caso de intentar escribir un reporte de datasets sobre un cat谩logo que no tiene datasets. Loggea un warning en lugar de levantar una excepci贸n.

0.2.20 (2017-08-01)

  • Elimina la verificaci贸n de SSL en las requests de ckan_reader.

0.2.19 (2017-08-01)

  • Elimina la verificaci贸n de SSL en las requests.

0.2.18 (2017-07-25)

  • Mejora la validaci贸n del campo temporal
  • Agrega formas de reporte de errores para el m茅todo DataJson.validate_catalog():
    • Devuelve s贸lo errores con only_errors=True
    • Devuelve una lista de errores lista para ser convertida en tabla con fmt="list"

0.2.17 (2017-07-18)

  • Agrega un m茅todo para convertir un intervalo repetido (Ej.: R/P1Y) en su representaci贸n en prosa (芦Anualmente禄).
  • Agrego m茅todo que estima los datasets federados que fueron borrados de un cat谩logo espec铆fico. Se consideran datasets federados y borrados de un cat谩logo espec铆fico aquellos cuyo publisher.name existe dentro de alg煤n otro dataset todav铆a presente en el cat谩logo espec铆fico.

0.2.16 (2017-07-13)

  • Bug fix: convierte a unicode antes de escribir un objeto a JSON.

0.2.15 (2017-07-11)

  • Modifica la definici贸n de dataset actualizado usando el campo 芦modified禄 del perfil de metadatos. Si este campo no est谩 presente en la metadata de un dataset, se lo considera desactualizado.

0.2.14 (2017-07-10)

  • Modifica la definici贸n de dataset usada para comparar limit谩ndola a la comparaci贸n por 芦title禄 y 芦publisher_name禄.

0.2.13 (2017-06-22)

  • Agrega m茅todo para verificar si un dataset individual est谩 actualizado

0.2.12 (2017-06-22)

  • Se modifica el template de CATALOG README
  • Se agrega el indicador 芦datasets_no_federados禄 a generate_catalogs_indicators

0.2.11 (2017-05-23)

  • Se agrega en core el m茅todo DataJson.generate_catalogs_indicators, que genera indicadores de monitoreo de cat谩logos, recopilando informaci贸n sobre, entre otras cosas, su validez, actualidad y formato de sus contenidos.

0.2.10 (2017-05-11)

  • Correci贸n ortogr谩fica del listado de frecuencias de actualizaci贸n admisibles (pydatajson/schemas/accrualPeriodicity.json).

0.2.9 (2017-05-04)

  • Hotfixes para que pydatajson sea deployable en nuevos entornos donde el setup.py estaba fallando.

0.2.5 (2017-02-16)

  • Se agrega una nueva funci贸n a readers, read_ckan_catalog, que traduce los metadatos que disponibiliza la Action API v3 de CKAN al est谩ndar data.json. Esta funci贸n no est谩 integrada a read_catalog.
  • Se modifican todos los esquemas de validaci贸n, de modo que los campos opcionales de cualquier tipo y nivel acepten strings vac铆as.

0.2.0 (2017-01-31)

  • Se reestructura la librer铆a en 4 m贸dulos: core, readers, writers y helpers. Toda la funcionalidad se mantiene intacta, pero algunas funciones muy utilizadas cambian de m贸dulo. En particular, pydatajson.pydatajson.read_catalog es ahora pydatajson.readers.read_catalog, y pydatajson.xlsx_to_json.write_json_catalog es ahora pydatajson.writers.write_json_catalog (o pydatajson.writers.write_json).
  • Se agrega el par谩metro frequency a pydatajson.DataJson.generate_harvester_config, que controla la frecuencia de cosecha que se pretende de los datasets a incluir en el archivo de configuraci贸n. Por omisi贸n, se usa 'R/P1D' (diariamente) para todos los datasets.
  • Se agrega la carpeta samples/, con dos rutinas de transformaci贸n y reporte sobre cat谩logos de metadatos en formato XLSX.

0.1.7 (2017-01-10)

  • Se agrega el m贸dulo xlsx_to_json, con dos m茅todos para lectura de archivos locales o remotos, sean JSON gen茅ricos (xlsx_to_json.read_json()) o metadatos de cat谩logos en formato XLSX (read_local_xlsx_catalog()).
  • Se agrega el m茅todo pydatajson.read_catalog() que interpreta todos las representaciones externas o internas de cat谩logos conocidas, y devuelve un diccionario con sus metadatos.

0.1.6 (2017-01-04)

  • Se incorpora el m茅todo DataJson.generate_harvestable_catalogs(), que filtra los datasets no deseados de un conjunto de cat谩logos.
  • Se agrega el par谩metro harvest a los m茅todos DataJson.generate_harvestable_catalogs(), DataJson.generate_datasets_report() y DataJson.generate_harvester_config(), para controlar el criterio de elecci贸n de los datasets a cosechar.
  • Se agrega el par谩metro export_path a los m茅todos DataJson.generate_harvestable_catalogs(), DataJson.generate_datasets_report() y DataJson.generate_harvester_config(), para controlar la exportaci贸n de sus resultados.

0.1.4 (2016-12-23)

  • Se incorpora el m茅todo DataJson.generate_datasets_report(), que reporta sobre los datasets y la calidad de calidad de metadatos de un conjunto de cat谩logos.
  • Se incorpora el m茅todo DataJson.generate_harvester_config(), que crea archivos de configuraci贸n para el Harvester a partir de los reportes de generate_datasets_report().

0.1.3 (2016-12-19)

  • Al resultado de DataJson.validate_catalog() se le incorpora una lista ("errors") con informaci贸n de los errores encontrados durante la validaci贸n en cada nivel de jerarqu铆a (芦catalog禄 y cada elemento de 芦dataset禄)

0.1.2 (2016-12-14)

  • Se incorpora validaci贸n de tipo y formato de campo
  • Los m茅todos DataJson.is_valid_catalog() y DataJson.validate_catalog() ahora aceptan un dict adem谩s de un path/to/data.json o una url a un data.json.

0.1.0 (2016-12-01)

Primera versi贸n para uso productivo del paquete.

  • La instalaci贸n via pip install deber铆a reconocer correctamente la ubicaci贸n de los validadores por default.
  • El manejo de data.json鈥檚 ubicados remotamente se hace en funci贸n del resultado de urlparse.urlparse
  • El formato de respuesta de validate_catalog se adec煤a a la 煤ltima especificaci贸n (ver samples/validate_catalog_returns.json.

0.0.13 (2016-11-25)

  • Intentar que la instalaci贸n del paquete sepa donde est谩n instalados los schemas por default

0.0.12 (2016-11-25)

  • Primera versi贸n propuesta para v0.1.0