Beispiel #1
0
    def test_fields_to_uppercase_modifies_all_lowercase_fields(self):
        fields = {
            'csv': 10,
            'json': 30,
        }

        expected = {'CSV': 10, 'JSON': 30}

        self.assertEqual(fields_to_uppercase(fields), expected)
Beispiel #2
0
    def test_fields_to_uppercase_modifies_mixed_fields(self):
        fields = {
            'csv': 5,
            'Csv': 10,
            'CSV': 7,
            'Json': 30,
            'GeoJSON': 47,
        }

        expected = {'CSV': 22, 'JSON': 30, 'GEOJSON': 47}

        self.assertEqual(fields_to_uppercase(fields), expected)
Beispiel #3
0
def normalize_values(apps, model):
    queryset = model.objects.filter(indicador_tipo__nombre__in=[
       'distribuciones_formatos_cant', 'datasets_frecuencia_cant'])

    for indicator in queryset:
        try:
            value = json.loads(indicator.indicador_valor)
            if isinstance(value, dict):
                normalized_value = fields_to_uppercase(value)
                if normalized_value != value:
                    # No quiero hacer un save si los valores no cambian
                    indicator.indicador_valor = json.dumps(normalized_value)
                    indicator.save()
        except json.JSONDecodeError:
            msg = f'error parseando el indicador:{indicator.pk}'
            LOGGER.warning(msg)
Beispiel #4
0
    def test_fields_to_uppercase_keeps_uppercase_fields_intact(self):
        fields = {'CSV': 30, 'JSON': 70}

        expected = {'CSV': 30, 'JSON': 70}

        self.assertEqual(fields_to_uppercase(fields), expected)
Beispiel #5
0
    def test_fields_to_uppercase_returns_unique_uppercase_keys(self):
        fields = {'csv': 10, 'CSV': 20, 'json': 30, 'JSON': 40}

        expected = {'CSV': 30, 'JSON': 70}

        self.assertEqual(fields_to_uppercase(fields), expected)
Beispiel #6
0
def _generate_indicators(catalog,
                         validator=None,
                         only_numeric=False,
                         broken_links=False,
                         verify_ssl=True,
                         url_check_timeout=1,
                         broken_links_threads=1):
    """Genera los indicadores de un catálogo individual.

    Args:
        catalog (dict): diccionario de un data.json parseado

    Returns:
        dict: diccionario con los indicadores del catálogo provisto
    """

    result = {}

    # Obtengo summary para los indicadores del estado de los metadatos
    result.update(
        _generate_status_indicators(catalog,
                                    validator=validator,
                                    verify_ssl=verify_ssl))

    # Genero indicadores relacionados con validacion de urls
    if broken_links:
        result.update(
            _generate_valid_urls_indicators(
                catalog,
                validator=validator,
                verify_ssl=verify_ssl,
                url_check_timeout=url_check_timeout,
                threads_count=broken_links_threads))

    # Genero los indicadores relacionados con fechas, y los agrego
    result.update(_generate_date_indicators(catalog,
                                            only_numeric=only_numeric))

    # Agrego la cuenta de los formatos de las distribuciones
    if not only_numeric:
        if 'dataset' in catalog:
            format_count = count_fields(get_distributions(catalog), 'format')
            format_count = fields_to_uppercase(format_count)
            type_count = count_fields(get_distributions(catalog), 'type')
            license_count = count_fields(get_datasets(catalog), 'license')
        else:
            format_count = type_count = license_count = {}

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

    # Agrego porcentaje de campos recomendados/optativos usados
    fields_count = _count_required_and_optional_fields(catalog)
    recomendados_pct = float(fields_count['recomendado']) / \
        fields_count['total_recomendado']
    optativos_pct = float(fields_count['optativo']) / \
        fields_count['total_optativo']
    result.update({
        'campos_recomendados_pct': round(recomendados_pct, 4),
        'campos_optativos_pct': round(optativos_pct, 4)
    })
    return fields_count, result