pydatajson package

Submodules

pydatajson.ckan_reader module

Extensión de pydatajson para leer catálogos de metadatos a través de la API de CKAN v3.

pydatajson.ckan_reader.add_accrualPeriodicity(dataset, package)[fuente]
pydatajson.ckan_reader.add_superTheme(dataset, package)[fuente]
pydatajson.ckan_reader.add_temporal(dataset, package)[fuente]
pydatajson.ckan_reader.map_group_to_theme(group)[fuente]

Mapea un diccionario con metadatos de cierto ‘group’ de CKAN a un diccionario con metadatos de un ‘theme’ según el estándar data.json.

pydatajson.ckan_reader.map_groups_to_themes(groups)[fuente]

Mapea una lista de ‘groups’ de CKAN a ‘themes’ de data.json.

pydatajson.ckan_reader.map_package_to_dataset(package, portal_url)[fuente]

Mapea un diccionario con metadatos de cierto ‘package’ de CKAN a un diccionario con metadatos de un ‘dataset’ según el estándar data.json.

pydatajson.ckan_reader.map_packages_to_datasets(packages, portal_url)[fuente]

Mapea una lista de ‘packages’ de CKAN a ‘datasets’ de data.json.

pydatajson.ckan_reader.map_resource_to_distribution(resource, portal_url)[fuente]

Mapea un diccionario con metadatos de cierto ‘resource’ CKAN a dicts con metadatos de una ‘distribution’ según el estándar data.json.

pydatajson.ckan_reader.map_resources_to_distributions(resources, portal_url)[fuente]

Mapea una lista de ‘resources’ CKAN a ‘distributions’ de data.json.

pydatajson.ckan_reader.map_status_to_catalog(status)[fuente]

Convierte el resultado de action.status_show() en metadata a nivel de catálogo.

pydatajson.ckan_reader.read_ckan_catalog(portal_url)[fuente]

Convierte los metadatos de un portal disponibilizados por la Action API v3 de CKAN al estándar data.json.

Parámetros:portal_url (str) – URL de un portal de datos CKAN que soporte la API v3.
Devuelve:Representación interna de un catálogo para uso en las funciones de esta librería.
Tipo del valor devuelto:
 dict

pydatajson.core module

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)[fuente]

Bases: dict

Métodos para trabajar con archivos data.json.

CATALOG_FIELDS_PATH = u'/home/docs/checkouts/readthedocs.org/user_builds/pydatajson/checkouts/0.3.2/pydatajson/fields'
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 (‘all’, ‘none’, ‘valid’, ‘report’ o ‘good’).
Devuelve:

Lista de diccionarios, con un elemento por cada dataset

presente en catalog.

Tipo del valor devuelto:
 

list

dataset_is_updated(catalog, dataset)[fuente]
datasets
distributions
fields
generate_catalog_readme(catalog, export_path=None)[fuente]

Genera una descripción textual en formato Markdown sobre los metadatos generales de un catálogo (título, editor, fecha de publicación, et cetera), junto con:

  • estado de los metadatos a nivel catálogo,
  • estado global de los metadatos,
  • cantidad de datasets federados y no federados,
  • detalles de los datasets no federados
  • cantidad de datasets y distribuciones incluidas

Es utilizada por la rutina diaria de libreria-catalogos para generar un README con información básica sobre 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 texto generado (en formato Markdown). Si se especifica, el método no devolverá nada.
Devuelve:

Texto de la descripción generada.

Tipo del valor devuelto:
 

str

generate_catalogs_indicators(catalogs=None, central_catalog=None)[fuente]
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 (‘all’, ‘none’, ‘valid’, ‘report’ o ‘good’).
  • report (str) – Path a un reporte/config especificando qué datasets marcar con harvest=1 (sólo si harvest==’report’).
  • 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_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 (‘all’, ‘none’, ‘valid’ o ‘report’).
  • 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==’report’.
  • 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, frequency=u'R/P1D', 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 (‘all’, ‘none’, ‘valid’, ‘report’ o ‘good’).
  • 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==’report’, en cuyo caso catalogs se ignora.
  • frequency (str) – Frecuencia de búsqueda de actualizaciones en los datasets a cosechar. Todo intervalo de frecuencia válido según ISO 8601 es válido. Es ‘R/P1D’ (diariamiente) por omisión, y si se pasa`None`, se conservará el valor de original de cada dataset, dataset[“accrualPeriodicity”].
  • 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_dataset(catalog, identifier=None, title=None)
get_datasets(catalog, filter_in=None, filter_out=None, meta_field=None)
get_distribution(catalog, identifier=None, title=None, dataset_identifier=None)
get_distributions(catalog, filter_in=None, filter_out=None, meta_field=None)
get_field(catalog, identifier=None, title=None, distribution_identifier=None)
get_fields(catalog, filter_in=None, filter_out=None, meta_field=None)
is_valid_catalog(catalog=None)[fuente]
validate_catalog(catalog=None, only_errors=False, fmt=u'dict', export_path=None)[fuente]
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

pydatajson.custom_exceptions module

Excepciones personalizadas para validación y registro de errores

exception pydatajson.custom_exceptions.BaseNonExistentError[fuente]

Bases: exceptions.ValueError

El id de una entidad no existe en el catálogo.

get_msg(entity_name, entity_type, entity_id)[fuente]
exception pydatajson.custom_exceptions.BaseRepetitionError[fuente]

Bases: exceptions.ValueError

El id de una entidad está repetido en el catálogo.

get_msg(entity_name, entity_type, entity_id=None, repeated_entities=None)[fuente]
exception pydatajson.custom_exceptions.BaseUnexpectedValue[fuente]

Bases: exceptions.ValueError

El id de una entidad está repetido en el catálogo.

get_msg(entity_name, entity_id, value_type, value_found, value_expected)[fuente]
class pydatajson.custom_exceptions.BaseValidationError(validator, message, validator_value, path, instance=None)[fuente]

Bases: object

Estructura para errores de validación personalizados.

exception pydatajson.custom_exceptions.DatasetIdNonExistentError(dataset_id)[fuente]

Bases: pydatajson.custom_exceptions.BaseNonExistentError

exception pydatajson.custom_exceptions.DatasetIdRepetitionError(dataset_id=None, repeated_datasets=None)[fuente]

Bases: pydatajson.custom_exceptions.BaseRepetitionError

exception pydatajson.custom_exceptions.DatasetTemporalMetadataError(temporal)[fuente]

Bases: exceptions.ValueError

exception pydatajson.custom_exceptions.DatasetUnexpectedTitle(dataset_id, title_found, title_expected)[fuente]

Bases: pydatajson.custom_exceptions.BaseUnexpectedValue

exception pydatajson.custom_exceptions.DistributionIdNonExistentError(distribution_id)[fuente]

Bases: pydatajson.custom_exceptions.BaseNonExistentError

exception pydatajson.custom_exceptions.DistributionIdRepetitionError(distribution_id=None, repeated_distributions=None)[fuente]

Bases: pydatajson.custom_exceptions.BaseRepetitionError

exception pydatajson.custom_exceptions.DistributionTitleNonExistentError(distribution_title, dataset_id, extra_msg=u'')[fuente]

Bases: pydatajson.custom_exceptions.BaseNonExistentError

exception pydatajson.custom_exceptions.DistributionTitleRepetitionError(distribution_title, repeated_distributions, extra_msg=u'')[fuente]

Bases: pydatajson.custom_exceptions.BaseRepetitionError

exception pydatajson.custom_exceptions.DistributionUnexpectedTitle(distribution_id, title_found, title_expected)[fuente]

Bases: pydatajson.custom_exceptions.BaseUnexpectedValue

exception pydatajson.custom_exceptions.FieldDescriptionRepetitionError(field_desc=None, repeated_fields=None)[fuente]

Bases: pydatajson.custom_exceptions.BaseRepetitionError

Hay un campo repetido en la distribución.

exception pydatajson.custom_exceptions.FieldFewValuesError(field, positive_values, minimum_values)[fuente]

Bases: exceptions.ValueError

exception pydatajson.custom_exceptions.FieldIdNonExistentError(field_id)[fuente]

Bases: pydatajson.custom_exceptions.BaseNonExistentError

exception pydatajson.custom_exceptions.FieldIdRepetitionError(field_id=None, repeated_fields=None)[fuente]

Bases: pydatajson.custom_exceptions.BaseRepetitionError

exception pydatajson.custom_exceptions.FieldTitleNonExistentError(field_title)[fuente]

Bases: pydatajson.custom_exceptions.BaseNonExistentError

exception pydatajson.custom_exceptions.FieldTitleRepetitionError(field_title=None, repeated_fields=None)[fuente]

Bases: pydatajson.custom_exceptions.BaseRepetitionError

Hay un campo repetido en la distribución.

exception pydatajson.custom_exceptions.FieldTitleTooLongError(field, field_len, max_field_len)[fuente]

Bases: exceptions.ValueError

exception pydatajson.custom_exceptions.FieldTooManyMissingsError(field, missing_values, positive_values)[fuente]

Bases: exceptions.ValueError

exception pydatajson.custom_exceptions.HeaderNotBlankOrIdError(worksheet, header_coord, header_value, ws_header_value)[fuente]

Bases: exceptions.ValueError

exception pydatajson.custom_exceptions.InvalidFieldTitleError(field, char, valid_field_chars)[fuente]

Bases: exceptions.ValueError

class pydatajson.custom_exceptions.ThemeIdRepeated(repeated_ids)[fuente]

Bases: pydatajson.custom_exceptions.BaseValidationError

exception pydatajson.custom_exceptions.TimeIndexFutureTimeValueError(iso_time_value, iso_now)[fuente]

Bases: exceptions.ValueError

exception pydatajson.custom_exceptions.TimeIndexTooShortError(iso_end_index, iso_half_temporal, temporal)[fuente]

Bases: exceptions.ValueError

exception pydatajson.custom_exceptions.TimeValueBeforeTemporalError(iso_time_value, iso_ini_temporal)[fuente]

Bases: exceptions.ValueError

pydatajson.helpers module

Métodos auxiliares

pydatajson.helpers.add_dicts(one_dict, other_dict)[fuente]

Suma clave a clave los dos diccionarios. Si algún valor es un diccionario, llama recursivamente a la función. Ambos diccionarios deben tener exactamente las mismas claves, y los valores asociados deben ser sumables, o diccionarios.

Parámetros:
  • one_dict (dict) –
  • other_dict (dict) –
Devuelve:

resultado de la suma

Tipo del valor devuelto:
 

dict

pydatajson.helpers.clean_str(s)[fuente]
pydatajson.helpers.ensure_dir_exists(directory)[fuente]

Se asegura de que un directorio exista.

pydatajson.helpers.find_ws_name(wb, name)[fuente]

Busca una hoja en un workbook sin importar mayúsculas/minúsculas.

pydatajson.helpers.get_ws_case_insensitive(wb, title)[fuente]

Devuelve una hoja en un workbook sin importar mayúsculas/minúsculas.

pydatajson.helpers.is_list_of_matching_dicts(list_of_dicts, expected_keys=None)[fuente]

Comprueba que una lista esté compuesta únicamente por diccionarios, que comparten exactamente las mismas claves.

Parámetros:
  • list_of_dicts (list) – Lista de diccionarios a comparar.
  • expected_keys (set) – Conjunto de las claves que cada diccionario debe tener. Si no se incluye, se asume que son las claves del primer diccionario de la lista.
Devuelve:

True si todos los diccionarios comparten sus claves.

Tipo del valor devuelto:
 

bool

pydatajson.helpers.parse_date_string(date_string)[fuente]

Parsea un string de una fecha con el formato de la norma ISO 8601 (es decir, las fechas utilizadas en los catálogos) en un objeto datetime de la librería estándar de python. Se tiene en cuenta únicamente la fecha y se ignora completamente la hora.

Parámetros:date_string (str) – fecha con formato ISO 8601.
Devuelve:objeto fecha especificada por date_string.
Tipo del valor devuelto:
 datetime
pydatajson.helpers.parse_repeating_time_interval(date_str, to=u'days')[fuente]
pydatajson.helpers.parse_repeating_time_interval_to_days(date_str)[fuente]

Parsea un string con un intervalo de tiempo con repetición especificado por la norma ISO 8601 en una cantidad de días que representa ese intervalo. Devuelve 0 en caso de que el intervalo sea inválido.

pydatajson.helpers.parse_repeating_time_interval_to_str(date_str)[fuente]

Devuelve descripción humana de un intervalo de repetición.

TODO: Por ahora sólo interpreta una lista fija de intervalos. Debería poder parsear cualquier caso.

pydatajson.helpers.parse_value(cell)[fuente]

Extrae el valor de una celda de Excel como texto.

pydatajson.helpers.sheet_to_table(worksheet)[fuente]

Transforma una hoja de libro de Excel en una lista de diccionarios.

Parámetros:worksheet (Workbook.worksheet) – Hoja de cálculo de un archivo XLSX según los lee openpyxl
Devuelve:
Lista de diccionarios, con tantos elementos como
registros incluya la hoja, y con tantas claves por diccionario como campos tenga la hoja.
Tipo del valor devuelto:
 list_of_dicts
pydatajson.helpers.string_to_list(string, sep=u', ')[fuente]

Transforma una string con elementos separados por sep en una lista.

pydatajson.helpers.traverse_dict(dicc, keys, default_value=None)[fuente]

Recorre un diccionario siguiendo una lista de claves, y devuelve default_value en caso de que alguna de ellas no exista.

Parámetros:
  • dicc (dict) – Diccionario a ser recorrido.
  • keys (list) – Lista de claves a ser recorrida. Puede contener índices de listas y claves de diccionarios mezcladas.
  • default_value – Valor devuelto en caso de que dicc no se pueda recorrer siguiendo secuencialmente la lista de keys hasta el final.
Devuelve:

El valor obtenido siguiendo la lista de keys dentro de dicc.

Tipo del valor devuelto:
 

object

pydatajson.helpers.validate_url(uri_string)[fuente]

Valida si un string es una URI válida.

pydatajson.readers module

Módulo ‘readers’ de Pydatajson

Contiene los métodos auxiliares para leer archivos con información tabular y catálogos de metadatos, en distintos fomatos.

pydatajson.readers.apply_default_values(catalog, default_values)[fuente]

Aplica valores default a los campos de un catálogo.

Si el campo está vacío, aplica el default. Si tiene un valor, deja el valor que estaba. Sólo soporta defaults para las siguientes clases:

catalog dataset distribution field
Parámetros:
  • catalog (dict) – Un catálogo.
  • default_values (dict) –

    Valores default para algunos de los campos del catálogo. {

    “dataset_issued”: “2017-06-22”, “distribution_issued”: “2017-06-22”

    }

pydatajson.readers.read_catalog(catalog, default_values=None)[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.
  • representación _externa_ es un path local o una URL remota a un (Una) –
  • con la metadata de un catálogo, en formato JSON o XLSX. La (archivo) –
  • _interna_ de un catálogo es un diccionario. (representación) –
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)[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 ‘http’ o ‘https’, 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)[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 ‘str’, 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)[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 ‘http’ o ‘https’, 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

pydatajson.writers module

Módulo ‘writers’ 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]

Función de compatibilidad con releases anteriores.

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)[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.

Module contents

Módulo pydatajson Conjunto de herramientas para validar y manipular la información presente en el archivo data.json de un Portal de Datos