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.
map_group_to_theme
(group)[source]¶ 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)[source]¶ Mapea una lista de ‘groups’ de CKAN a ‘themes’ de data.json.
-
pydatajson.ckan_reader.
map_package_to_dataset
(package, portal_url)[source]¶ 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)[source]¶ Mapea una lista de ‘packages’ de CKAN a ‘datasets’ de data.json.
-
pydatajson.ckan_reader.
map_resource_to_distribution
(resource, portal_url)[source]¶ 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)[source]¶ Mapea una lista de ‘resources’ CKAN a ‘distributions’ de data.json.
-
pydatajson.ckan_reader.
map_status_to_catalog
(status)[source]¶ Convierte el resultado de action.status_show() en metadata a nivel de catálogo.
-
pydatajson.ckan_reader.
read_ckan_catalog
(portal_url)[source]¶ Convierte los metadatos de un portal disponibilizados por la Action API v3 de CKAN al estándar data.json.
Parameters: portal_url (str) – URL de un portal de datos CKAN que soporte la API v3. Returns: Representación interna de un catálogo para uso en las funciones de esta librería. Return type: 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
(schema_filename=u'catalog.json', schema_dir=u'/home/travis/build/datosgobar/pydatajson/pydatajson/schemas')[source]¶ Bases:
object
Métodos para trabajar con archivos data.json.
-
ABSOLUTE_SCHEMA_DIR
= u'/home/travis/build/datosgobar/pydatajson/pydatajson/schemas'¶
-
CATALOG_FIELDS_PATH
= u'/home/travis/build/datosgobar/pydatajson/pydatajson/fields'¶
-
DEFAULT_CATALOG_SCHEMA_FILENAME
= u'catalog.json'¶
-
catalog_report
(catalog, harvest=u'none', report=None)[source]¶ Genera un reporte sobre los datasets de un único catálogo.
Parameters: - 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’ o ‘report’).
Returns: - Lista de diccionarios, con un elemento por cada dataset
presente en catalog.
Return type: list
-
generate_catalog_readme
(catalog, export_path=None)[source]¶ 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.
Parameters: - 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.
Returns: Texto de la descripción generada.
Return type: str
-
generate_catalogs_indicators
(catalogs, central_catalog=None)[source]¶ Genera una lista de diccionarios con varios indicadores sobre los catálogos provistos, tales como la cantidad de datasets válidos, días desde su última fecha actualizada, entre otros.
Parameters: - catalogs (str o list) – uno o más catalogos sobre los que se quiera obtener indicadores
- central_catalog (str) – catálogo central sobre el cual comparar los datasets subidos en la lista anterior. De no pasarse no se generarán indicadores de federación de datasets.
Returns: - 2 elementos, el primero una lista de diccionarios con los
indicadores esperados, uno por catálogo pasado, y el segundo un diccionario con indicadores a nivel global, datos sobre la lista entera en general.
Return type: tuple
-
generate_datasets_report
(catalogs, harvest=u'valid', report=None, export_path=None)[source]¶ Genera un reporte sobre las condiciones de la metadata de los datasets contenidos en uno o varios catálogos.
Parameters: - 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’ o ‘report’).
- 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.
Returns: Contiene tantos dicts como datasets estén presentes en catalogs, con la data del reporte generado.
Return type: list
-
generate_datasets_summary
(catalog, export_path=None)[source]¶ 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.
Parameters: - 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.
Returns: Contiene tantos dicts como datasets estén presentes en catalogs, con los datos antes mencionados.
Return type: list
-
generate_harvestable_catalogs
(catalogs, harvest=u'all', report=None, export_path=None)[source]¶ Filtra los catálogos provistos según el criterio determinado en harvest.
Parameters: - 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.
Returns: Lista de catálogos.
Return type: list of dicts
-
generate_harvester_config
(catalogs=None, harvest=u'valid', report=None, frequency=u'R/P1D', export_path=None)[source]¶ 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).
Parameters: - 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’ 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’, 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.
Returns: Un diccionario con variables de configuración por cada dataset a cosechar.
Return type: list of dicts
-
is_valid_catalog
(catalog)[source]¶ 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.
Parameters: catalog (str o dict) – Catálogo (dict, JSON o XLSX) a ser validado. Returns: True si el data.json cumple con el schema, sino False. Return type: bool
-
validate_catalog
(catalog)[source]¶ 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.
Parameters: catalog (str o dict) – Catálogo (dict, JSON o XLSX) a ser validado. Returns: 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”.
Return type: dict
-
-
pydatajson.core.
main
()[source]¶ 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.helpers module¶
Métodos auxiliares
-
pydatajson.helpers.
add_dicts
(one_dict, other_dict)[source]¶ 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.
Parameters: - one_dict (dict) –
- other_dict (dict) –
Returns: resultado de la suma
Return type: dict
-
pydatajson.helpers.
is_list_of_matching_dicts
(list_of_dicts, expected_keys=None)[source]¶ Comprueba que una lista esté compuesta únicamente por diccionarios, que comparten exactamente las mismas claves.
Parameters: - 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.
Returns: True si todos los diccionarios comparten sus claves.
Return type: bool
-
pydatajson.helpers.
parse_repeating_time_interval
(date_str)[source]¶ 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.
sheet_to_table
(worksheet)[source]¶ Transforma una hoja de libro de Excel en una lista de diccionarios.
Parameters: worksheet (Workbook.worksheet) – Hoja de cálculo de un archivo XLSX según los lee openpyxl Returns: Lista de diccionarios, con tantos elementos como registros incluya la hoja, y con tantas claves por diccionario como campos tenga la hoja. Return type: list_of_dicts
-
pydatajson.helpers.
string_to_list
(string, sep=u', ')[source]¶ Transforma una string con elementos separados por sep en una lista.
-
pydatajson.helpers.
traverse_dict
(dicc, keys, default_value=None)[source]¶ Recorre un diccionario siguiendo una lista de claves, y devuelve default_value en caso de que alguna de ellas no exista.
Parameters: - 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.
Returns: El valor obtenido siguiendo la lista de keys dentro de dicc.
Return type: object
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.
read_catalog
(catalog)[source]¶ 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.
Parameters: - 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) –
Returns: Representación interna de un catálogo para uso en las funciones de esta librería.
Return type: dict
-
pydatajson.readers.
read_json
(json_path_or_url)[source]¶ 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.
Parameters: json_path_or_url (str) – Path local o URL remota a un archivo de texto plano en formato JSON. Returns: El diccionario que resulta de deserializar json_path_or_url. Return type: dict
-
pydatajson.readers.
read_local_xlsx_catalog
(xlsx_path)[source]¶ Genera un diccionario de metadatos de catálogo a partir de un XLSX bien formado.
Parameters: xlsx_path (str) – Path a un archivo XLSX “template” para describir la metadata de un catálogo. Returns: Diccionario con los metadatos de un catálogo. Return type: dict
-
pydatajson.readers.
read_table
(path)[source]¶ 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.
Parameters: path (str o list) – Como ‘str’, path a un archivo CSV o XLSX. Returns: Lista de diccionarios con claves idénticas representando el archivo original. Return type: list
-
pydatajson.readers.
read_xlsx_catalog
(xlsx_path_or_url)[source]¶ 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.
Parameters: 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. Returns: El diccionario que resulta de procesar xlsx_path_or_url. Return type: 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)[source]¶ Escribo un objeto a un archivo JSON con codificación UTF-8.
-
pydatajson.writers.
write_json_catalog
(catalog, path)[source]¶ Función de compatibilidad con releases anteriores.
-
pydatajson.writers.
write_table
(table, path)[source]¶ 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.
Parameters: - table (list of dicts) – Tabla a ser exportada.
- 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