Skip to content

Commit

Permalink
Merge dead239 into 9eec443
Browse files Browse the repository at this point in the history
  • Loading branch information
lrromero committed Mar 26, 2019
2 parents 9eec443 + dead239 commit 21f84a6
Show file tree
Hide file tree
Showing 7 changed files with 762 additions and 28 deletions.
6 changes: 4 additions & 2 deletions pydatajson/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -1063,10 +1063,12 @@ def _extract_datasets_to_harvest(cls, report):
return datasets_to_harvest

def generate_catalogs_indicators(self, catalogs=None,
central_catalog=None):
central_catalog=None,
identifier_search=False):
catalogs = catalogs or self
return indicators.generate_catalogs_indicators(
catalogs, central_catalog, validator=self.validator)
catalogs, central_catalog, identifier_search=identifier_search,
validator=self.validator)

def _count_fields_recursive(self, dataset, fields):
"""Cuenta la información de campos optativos/recomendados/requeridos
Expand Down
67 changes: 48 additions & 19 deletions pydatajson/indicators.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ def generate_numeric_indicators(catalog, validator=None):


def generate_catalogs_indicators(catalogs, central_catalog=None,
identifier_search=False,
validator=None):
"""Genera una lista de diccionarios con varios indicadores sobre
los catálogos provistos, tales como la cantidad de datasets válidos,
Expand Down Expand Up @@ -81,8 +82,8 @@ def generate_catalogs_indicators(catalogs, central_catalog=None,
fields_count, result = _generate_indicators(
catalog, validator=validator)
if central_catalog:
result.update(_federation_indicators(catalog,
central_catalog))
result.update(_federation_indicators(
catalog, central_catalog, identifier_search=identifier_search))
if not indicators_list:
# La primera iteracion solo copio el primer resultado
network_indicators = result.copy()
Expand Down Expand Up @@ -155,7 +156,8 @@ def _generate_indicators(catalog, validator=None, only_numeric=False):
return fields_count, result


def _federation_indicators(catalog, central_catalog):
def _federation_indicators(catalog, central_catalog,
identifier_search=False):
"""Cuenta la cantidad de datasets incluídos tanto en la lista
'catalogs' como en el catálogo central, y genera indicadores a partir
de esa información.
Expand Down Expand Up @@ -191,22 +193,49 @@ def _federation_indicators(catalog, central_catalog):
datasets_no_federados = []
datasets_federados_eliminados = []

# busca c/dataset del catálogo específico a ver si está en el central
for dataset in catalog.get('dataset', []):
found = False
for central_dataset in central_catalog.get('dataset', []):
new_dataset = (dataset.get('title'), dataset.get('landingPage'))
if (datasets_equal(dataset, central_dataset) and
new_dataset not in datasets_federados):
found = True
federados += 1
datasets_federados.append(new_dataset)
dist_federadas += len(dataset.get('distribution', []))
break
if not found:
no_federados += 1
datasets_no_federados.append((dataset.get('title'),
dataset.get('landingPage')))
# If catalog id:
catalog_identifier = catalog.get('identifier')
if identifier_search:
central_datasets = {ds['identifier'] for ds in
central_catalog.get('dataset', [])}

catalog_datasets = {catalog_identifier + '_' + ds['identifier']
for ds in catalog.get('dataset', [])}

federated_ids = catalog_datasets & central_datasets

federados = len(federated_ids)
no_federados = len(catalog_datasets) - federados
datasets_federados = [(ds.get('title'), ds.get('landingPage')) for
ds in catalog.get('dataset', []) if
catalog_identifier + '_' + ds['identifier']
in federated_ids]
datasets_no_federados = [(ds.get('title'), ds.get('landingPage')) for
ds in catalog.get('dataset', []) if
catalog_identifier + '_' + ds['identifier']
not in federated_ids]
dist_federadas = sum([len(ds.get('distribution', [])) for ds in
central_catalog.get('dataset', []) if
ds['identifier'] in federated_ids])

else:
# busca c/dataset del catálogo específico a ver si está en el central
for dataset in catalog.get('dataset', []):
found = False
for central_dataset in central_catalog.get('dataset', []):
new_dataset = (dataset.get('title'),
dataset.get('landingPage'))
if (datasets_equal(dataset, central_dataset) and
new_dataset not in datasets_federados):
found = True
federados += 1
datasets_federados.append(new_dataset)
dist_federadas += len(dataset.get('distribution', []))
break
if not found:
no_federados += 1
datasets_no_federados.append((dataset.get('title'),
dataset.get('landingPage')))

# busca c/dataset del central cuyo publisher podría pertenecer al
# catálogo específico, a ver si está en el catálogo específico
Expand Down
226 changes: 226 additions & 0 deletions tests/samples/central.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,226 @@
{
"publisher": {
"mbox": "datos@modernizacion.gob.ar",
"name": "Ministerio de Modernización"
},
"license": "Open Data Commons Open Database License 1.0",
"description": "Portal de Datos Abiertos del Gobierno de la República Argentina",
"language": [
"spa"
],
"title": "Datos Argentina",
"issued": "2016-04-14T19:48:05.433640-03:00",
"rights": "Derechos especificados en la licencia.",
"modified": "2016-04-19T19:48:05.433640-03:00",
"dataset": [
{
"publisher": {
"mbox": "onc@modernizacion.gob.ar",
"name": "Ministerio de Modernización. Secretaría de Modernización Administrativa. Oficina Nacional de Contrataciones"
},
"license": "Open Data Commons Open Database License 1.0",
"description": "Datos correspondientes al Sistema de Contrataciones Electrónicas (Argentina Compra)",
"superTheme": [
"econ"
],
"title": "Sistema de contrataciones electrónicas",
"issued": "2016-04-14T19:48:05.433640-03:00",
"temporal": "2015-01-01/2015-12-31",
"modified": "2016-04-19T19:48:05.433640-03:00",
"language": [
"spa"
],
"theme": [
"contrataciones",
"compras",
"convocatorias"
],
"keyword": [
"bienes",
"compras",
"contrataciones",
"bienes y compras"
],
"accrualPeriodicity": "R/P1Y",
"spatial": "ARG",
"identifier": "fed_1_99db6631-d1c9-470b-a73e-c62daa32c777",
"contactPoint": {
"hasEmail": "onc-compraselectronicas@modernizacion.gob.ar",
"fn": "Ministerio de Modernización. Secretaría de Modernización Administrativa. Oficina Nacional de Contrataciones. Dirección de Compras Electrónicas."
},
"landingPage": "http://datos.gob.ar/dataset/contrataciones-electronicas",
"distribution": [
{
"accessURL": "http://datos.gob.ar/dataset/sistema-de-contrataciones-electronicas-argentina-compra/archivo/fa3603b3-0af7-43cc-9da9-90a512217d8a",
"identifier": "1.1",
"description": "Listado de las convocatorias abiertas durante el año 2015 en el sistema de contrataciones electrónicas",
"license": "Open Data Commons Open Database License 1.0",
"title": "Convocatorias abiertas durante el año 2015",
"dataset_identifier": "99db6631-d1c9-470b-a73e-c62daa32c777",
"byteSize": 5120,
"type": "file",
"format": "CSV",
"rights": "Derechos especificados en la licencia.",
"mediaType": "text/csv",
"modified": "2016-04-19T19:48:05.433640-03:00",
"downloadURL": "http://186.33.211.253/dataset/99db6631-d1c9-470b-a73e-c62daa32c420/resource/4b7447cb-31ff-4352-96c3-589d212e1cc9/download/convocatorias-abiertas-anio-2015.csv",
"field": [
{
"title": "procedimiento_id",
"type": "integer",
"id": "proc12",
"description": "Identificador único del procedimiento de contratación"
},
{
"type": "integer",
"description": "Identificador único del organismo que realiza la convocatoria. Organismo de máximo nivel jerárquico al que pertenece la unidad operativa de contrataciones.",
"title": "organismo_unidad_operativa_contrataciones_id"
},
{
"type": "integer",
"description": "Identificador único de la unidad operativa de contrataciones",
"title": "unidad_operativa_contrataciones_id"
},
{
"type": "string",
"description": "Organismo que realiza la convocatoria. Organismo de máximo nivel jerárquico al que pertenece la unidad operativa de contrataciones.",
"title": "organismo_unidad_operativa_contrataciones_desc"
},
{
"type": "string",
"description": "Unidad operativa de contrataciones.",
"title": "unidad_operativa_contrataciones_desc"
},
{
"type": "string",
"description": "Tipo de procedimiento al que se adecua la contratación.",
"title": "tipo_procedimiento_contratacion"
},
{
"type": "date",
"description": "Año en el que se inició el proceso de la convocatoria.",
"title": "ejercicio_procedimiento_anio"
},
{
"type": "date",
"description": "Fecha de publicación de la convocatoria en formato AAAA-MM-DD, ISO 8601.",
"title": "fecha_publicacion_convocatoria"
},
{
"type": "string",
"description": "Modalidad bajo la cual se realiza la convocatoria.",
"title": "modalidad_convocatoria"
},
{
"type": "string",
"description": "Clase de la convocatoria.",
"title": "clase_convocatoria"
},
{
"type": "string",
"description": "Objeto/objetivo de la convocatoria",
"title": "objeto_convocatoria"
}
],
"issued": "2016-04-14T19:48:05.433640-03:00",
"fileName": "convocatoriasabiertasduranteelao.csv"
}
],
"source": "Ministerio de modernizacion"
},
{
"publisher": {
"mbox": "onc@modernizacion.gob.ar",
"name": "Ministerio de Modernización. Secretaría de Modernización Administrativa. Oficina Nacional de Contrataciones"
},
"license": "Open Data Commons Open Database License 1.0",
"description": "Datos correspondientes al Sistema de Contrataciones Electrónicas (Argentina Compra) (sin datos)",
"superTheme": [
"ECON"
],
"title": "Sistema de contrataciones electrónicas (sin datos)",
"issued": "2016-04-14T19:48:05.433640-03:00",
"temporal": "2015-01-01/2015-12-31",
"modified": "2016-04-19T19:48:05.433640-03:00",
"language": [
"spa"
],
"theme": [
"contrataciones",
"compras",
"convocatorias"
],
"keyword": [
"bienes",
"compras",
"contrataciones",
"bienes y compras"
],
"accrualPeriodicity": "R/P1Y",
"spatial": "ARG",
"identifier": "fed_2_99db6631-d1c9-470b-a73e-c62daa32c420",
"contactPoint": {
"hasEmail": "onc-compraselectronicas@modernizacion.gob.ar",
"fn": "Ministerio de Modernización. Secretaría de Modernización Administrativa. Oficina Nacional de Contrataciones. Dirección de Compras Electrónicas."
},
"landingPage": "http://datos.gob.ar/dataset/argentina-compra",
"distribution": [
{
"accessURL": "http://datos.gob.ar/dataset/sistema-de-contrataciones-electronicas-argentina-compra/archivo/fa3603b3-0af7-43cc-9da9-90a512217d8a",
"identifier": "d_7d4d816f-3a40-476e-ab71-d48a3f0eb3c8",
"description": "Listado de las convocatorias abiertas durante el año 2015 en el sistema de contrataciones electrónicas",
"license": "Open Data Commons Open Database License 1.0",
"title": "Convocatorias abiertas durante el año 2015",
"dataset_identifier": "99db6631-d1c9-470b-a73e-c62daa32c420",
"byteSize": 5120,
"type": "documentation",
"format": "PDF",
"rights": "Derechos especificados en la licencia.",
"mediaType": "application/pdf",
"modified": "2016-04-19T19:48:05.433640-03:00",
"downloadURL": "http://186.33.211.253/dataset/99db6631-d1c9-470b-a73e-c62daa32c420/resource/4b7447cb-31ff-4352-96c3-589d212e1cc9/download/convocatorias-abiertas-anio-2015.pdf",
"issued": "2016-04-14T19:48:05.433640-03:00",
"fileName": "convocatoriasabiertasduranteelao.pdf"
}
],
"source": "Ministerio de modernizacion"
}
],
"identifier": "7d4d816f-3a40-476e-ab71-d48a3f0eb3c8",
"version": "1.1",
"spatial": "ARG",
"superThemeTaxonomy": "http://datos.gob.ar/superThemeTaxonomy.json",
"themeTaxonomy": [
{
"label": "Convocatorias",
"description": "Datasets sobre licitaciones en estado de convocatoria.",
"id": "convocatorias"
},
{
"label": "Adquisición",
"description": "Datasets sobre compras realizadas.",
"id": "compras"
},
{
"label": "Contrataciones",
"description": "Datasets sobre contrataciones.",
"id": "contrataciones"
},
{
"label": "Adjudicaciones",
"description": "Datasets sobre licitaciones adjudicadas.",
"id": "adjudicaciones"
},
{
"label": "Normativa",
"description": "Datasets sobre normativa para compras y contrataciones.",
"id": "normativa"
},
{
"label": "Proveeduría",
"description": "Datasets sobre proveedores del Estado.",
"id": "proveedores"
}
],
"homepage": "http://datos.gob.ar"
}

0 comments on commit 21f84a6

Please sign in to comment.