Skip to content

Commit

Permalink
Merge fbf5cf2 into 3fedafd
Browse files Browse the repository at this point in the history
  • Loading branch information
lrromero committed Jul 6, 2018
2 parents 3fedafd + fbf5cf2 commit 57754ba
Show file tree
Hide file tree
Showing 13 changed files with 61,017 additions and 53 deletions.
2 changes: 1 addition & 1 deletion pydatajson/fields/fields.json
Expand Up @@ -31,7 +31,7 @@
"accrualPeriodicity": "requerido",
"issued": "requerido",
"modified": "recomendado",
"identifier": "optativo",
"identifier": "requerido",
"language": "optativo",
"spatial": "optativo",
"temporal": "recomendado",
Expand Down
61 changes: 16 additions & 45 deletions pydatajson/indicators.py
Expand Up @@ -14,12 +14,14 @@
import json
import os
from datetime import datetime
from collections import Counter

from six import string_types

from . import helpers
from . import readers
from .reporting import generate_datasets_summary
from .search import get_datasets, get_distributions

CENTRAL_CATALOG = "http://datos.gob.ar/data.json"
ABSOLUTE_PROJECT_DIR = os.path.dirname(os.path.abspath(__file__))
Expand Down Expand Up @@ -124,10 +126,17 @@ def _generate_indicators(catalog, validator=None, only_numeric=False):
_generate_date_indicators(catalog, only_numeric=only_numeric))
# Agrego la cuenta de los formatos de las distribuciones
if not only_numeric:
count = _count_distribution_formats(catalog)
if 'dataset' in catalog:
format_count = count_fields(get_distributions(catalog), 'format')
license_count = count_fields(get_datasets(catalog), 'license')
else:
format_count = license_count = {}

result.update({
'distribuciones_formatos_cant': count
'distribuciones_formatos_cant': format_count,
'datasets_licencias_cant': license_count,
})

# Agrego porcentaje de campos recomendados/optativos usados
fields_count = _count_required_and_optional_fields(catalog)
recomendados_pct = 100 * float(fields_count['recomendado']) / \
Expand Down Expand Up @@ -443,49 +452,6 @@ def _generate_date_indicators(catalog, tolerance=0.2, only_numeric=False):
return result


def _count_distribution_formats(catalog):
"""Cuenta los formatos especificados por el campo 'format' de cada
distribución de un catálogo o de un dataset.
Args:
catalog (str o dict): path a un catálogo, o un dict de python que
Returns:
dict: diccionario con los formatos de las distribuciones
encontradas como claves, con la cantidad de ellos en sus valores.
"""

# Leo catálogo
catalog = readers.read_catalog(catalog)
catalog_formats = {}

for dataset in catalog.get('dataset', []):
dataset_formats = _count_distribution_formats_dataset(dataset)

for distribution_format in dataset_formats:
count_catalog = catalog_formats.get(distribution_format, 0)
count_dataset = dataset_formats.get(distribution_format, 0)
catalog_formats[
distribution_format] = count_catalog + count_dataset

return catalog_formats


def _count_distribution_formats_dataset(dataset):
formats = {}
for distribution in dataset['distribution']:
# 'format' es recomendado, no obligatorio. Puede no estar.
distribution_format = distribution.get('format', None)

if distribution_format:
# Si no está en el diccionario, devuelvo 0
count = formats.get(distribution_format, 0)

formats[distribution_format] = count + 1

return formats


def _days_from_last_update(catalog, date_field="modified"):
"""Calcula días desde la última actualización del catálogo.
Expand Down Expand Up @@ -703,3 +669,8 @@ def _filter_by_likely_publisher(central_datasets, catalog_datasets):
filtered_central_datasets.append(central_dataset)

return filtered_central_datasets


def count_fields(targets, field):
"""Cuenta la cantidad de values en el key especificado de una lista de diccionarios"""
return Counter([target[field] for target in targets if field in target])
15,213 changes: 15,213 additions & 0 deletions tests/cassetes/indicators/test_license_indicators.yaml

Large diffs are not rendered by default.

30,404 changes: 30,404 additions & 0 deletions tests/cassetes/indicators/test_network_license_indicators.yaml

Large diffs are not rendered by default.

15,213 changes: 15,213 additions & 0 deletions tests/cassetes/indicators/test_no_licenses_indicators.yaml

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion tests/results/minimum_data.json
Expand Up @@ -9,7 +9,7 @@
"dataset": [
{
"status": "OK",
"identifier": null,
"identifier": "1",
"list_index": 0,
"errors": [],
"title": "Sistema de contrataciones electrónicas"
Expand Down
1 change: 1 addition & 0 deletions tests/samples/minimum_data.json
Expand Up @@ -9,6 +9,7 @@
"dataset": [
{
"title": "Sistema de contrataciones electrónicas",
"identifier": "1",
"description": "Datos correspondientes al Sistema de Contrataciones Electrónicas (Argentina Compra)",
"publisher": {
"name": "Ministerio de Modernización. Secretaría de Modernización Administrativa. Oficina Nacional de Contrataciones"
Expand Down
1 change: 1 addition & 0 deletions tests/samples/missing_periodicity.json
Expand Up @@ -8,6 +8,7 @@
"title": "Datos Argentina",
"dataset": [
{
"identifier": "1",
"publisher": {
"name": "Ministerio de Modernización. Secretaría de Modernización Administrativa. Oficina Nacional de Contrataciones"
},
Expand Down
3 changes: 3 additions & 0 deletions tests/samples/several_datasets.json
Expand Up @@ -9,6 +9,7 @@
"superThemeTaxonomy": "http://datos.gob.ar/superThemeTaxonomy.json",
"dataset": [
{
"identifier": "1",
"publisher": {},
"description": "Datos correspondientes al Sistema de Contrataciones Electrónicas (Argentina Compra)",
"superTheme": [
Expand Down Expand Up @@ -50,6 +51,7 @@
]
},
{
"identifier": "2",
"publisher": {
"name": "Ministerio de Modernización. Secretaría de Modernización Administrativa. Oficina Nacional de Contrataciones"
},
Expand All @@ -73,6 +75,7 @@
]
},
{
"identifier": "3",
"publisher": {
"name": "Ministerio de Modernización. Secretaría de Modernización Administrativa. Oficina Nacional de Contrataciones"
},
Expand Down
3 changes: 3 additions & 0 deletions tests/samples/several_datasets_for_harvest.json
Expand Up @@ -8,6 +8,7 @@
"title": "Cosechando Datos Argentina",
"dataset": [
{
"identifier": "1",
"publisher": {},
"description": "Datos correspondientes al Sistema de Contrataciones Electrónicas (Argentina Compra)",
"superTheme": [
Expand Down Expand Up @@ -47,6 +48,7 @@
]
},
{
"identifier": "2",
"publisher": {
"name": "Ministerio de Modernización. Secretaría de Modernización Administrativa. Oficina Nacional de Contrataciones"
},
Expand All @@ -68,6 +70,7 @@
]
},
{
"identifier": "3",
"publisher": {
"name": "Ministerio de Modernización. Secretaría de Modernización Administrativa. Oficina Nacional de Contrataciones"
},
Expand Down
106 changes: 106 additions & 0 deletions tests/samples/several_datasets_with_licenses.json
@@ -0,0 +1,106 @@
{
"publisher": {
"mbox": "datos@modernizacion.gob.ar",
"name": "Ministerio de Modernización"
},
"description": "Datasets para reporte pre cosecha",
"title": "Cosechando Datos Argentina",
"issued": "2016-04-14T19:48:05.433640-03:00",
"superThemeTaxonomy": "http://datos.gob.ar/superThemeTaxonomy.json",
"dataset": [
{
"identifier": "1",
"license": "Creative Commons Attribution",
"publisher": {},
"description": "Datos correspondientes al Sistema de Contrataciones Electrónicas (Argentina Compra)",
"superTheme": [
"ECON",
"HEAL"
],
"title": "Sistema de contrataciones electrónicas UNO",
"issued": "2016-04-14T19:48:05.433640-03:00",
"modified": "2016-04-14T19:48:05.433640-03:00",
"source": "Ministerio de modernizacion",
"accrualPeriodicity": "R/P1W",
"distribution": [
{
"accessURL": "http://datos.gob.ar/dataset1.csv",
"issued": "2016-04-14T19:48:05.433640-03:00",
"title": "Convocatorias 2015"
},
{
"accessURL": "http://datos.gob.ar",
"downloadURL": [
"http://186.33.211.253/dataset2.csv"
],
"title": "Convocatorias 2016",
"issued": "2016-04-14T19:48:05.433640-03:00"
},
{
"accessURL": "http://datos.gob.ar",
"downloadURL": 444444,
"title": "Convocatorias 2017",
"issued": "2016-04-14T19:48:05.433640-03:00"
},
{
"accessURL": "http://datos.gob.ar",
"downloadURL": "http://186.33.211.253/dataset3.csv",
"title": "Convocatorias abiertas durante el año 2015",
"issued": "2016-04-14T19:48:05.433640-03:00",
"format": "XLSX"
}
]
},
{
"identifier": "2",
"license": "Open Data Commons Open Database License 1.0",
"publisher": {
"name": "Ministerio de Modernización. Secretaría de Modernización Administrativa. Oficina Nacional de Contrataciones"
},
"description": "Datos correspondientes al Sistema de Contrataciones Electrónicas (Argentina Compra)",
"superTheme": [
"ECON"
],
"title": "Sistema de contrataciones electrónicas DOS",
"issued": "2016-04-14T19:48:05.433640-03:00",
"modified": "2016-04-14T19:48:05.433640-03:00",
"source": "Ministerio de modernizacion",
"accrualPeriodicity": "eventual",
"distribution": [
{
"accessURL": "http://datos.gob.ar/dataset/sistema-de-contrataciones-electronicas-argentina-compra/archivo/fa3603b3-0af7-43cc-9da9-90a512217d8a",
"downloadURL": "http://186.33.211.253/dataset/99db6631-d1c9-470b-a73e-c62daa32c420/resource/4b7447cb-31ff-4352-96c3-589d212e1cc9/download/convocatorias-abiertas-anio-2015.csv",
"title": "Convocatorias abiertas durante el año 2015",
"issued": "2016-04-14T19:48:05.433640-03:00",
"format": "PDF"
}
]
},
{
"identifier": "3",
"publisher": {
"name": "Ministerio de Modernización. Secretaría de Modernización Administrativa. Oficina Nacional de Contrataciones"
},
"description": "Datos correspondientes al Sistema de Contrataciones Electrónicas (Argentina Compra)",
"superTheme": [
"ECON"
],
"title": "Sistema de contrataciones electrónicas TRES",
"issued": "2016-04-14T19:48:05.433640-03:00",
"modified": "2016-04-14T19:48:05.433640-03:00",
"source": "Ministerio de modernizacion",
"accrualPeriodicity": "R/P1M",
"distribution": [
{
"accessURL": "http://datos.gob.ar/dataset/sistema-de-contrataciones-electronicas-argentina-compra/archivo/fa3603b3-0af7-43cc-9da9-90a512217d8a",
"downloadURL": "http://186.33.211.253/dataset/99db6631-d1c9-470b-a73e-c62daa32c420/resource/4b7447cb-31ff-4352-96c3-589d212e1cc9/download/convocatorias-abiertas-anio-2015.csv",
"title": "Convocatorias abiertas durante el año 2015",
"issued": "2016-04-14T19:48:05.433640-03:00",
"format": "CSV"
}
]
}
],
"version": "1.1",
"identifier": "7d4d816f-3a40-476e-ab71-d48a3f0eb3c8"
}
6 changes: 3 additions & 3 deletions tests/test_core.py
Expand Up @@ -553,19 +553,19 @@ def test_generate_datasets_summary(self):
expected = [
OrderedDict([('indice', 0),
('titulo', 'Sistema de contrataciones electrónicas UNO'),
('identificador', None),
('identificador', '1'),
('estado_metadatos', 'ERROR'),
('cant_errores', 4),
('cant_distribuciones', 4)]),
OrderedDict([('indice', 1),
('titulo', 'Sistema de contrataciones electrónicas DOS'),
('identificador', None),
('identificador', '2'),
('estado_metadatos', 'OK'),
('cant_errores', 0),
('cant_distribuciones', 1)]),
OrderedDict([('indice', 2),
('titulo', 'Sistema de contrataciones electrónicas TRES'),
('identificador', None),
('identificador', '3'),
('estado_metadatos', 'OK'),
('cant_errores', 0),
('cant_distribuciones', 1)])]
Expand Down

0 comments on commit 57754ba

Please sign in to comment.