#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Excepciones personalizadas para validación y registro de errores"""
from __future__ import unicode_literals
from __future__ import print_function
from __future__ import with_statement
import os
[documentos]class BaseValidationError(object):
"""Estructura para errores de validación personalizados."""
def __init__(self, validator, message, validator_value, path,
instance=None):
super(BaseValidationError, self).__init__()
# es el tipo de validación que se realiza
self.validator = validator
# es el mensaje de error que explica la validación que falla
self.message = message
# son los parámetros aplicados a ese tipo de validación
self.validator_value = validator_value
# es el camino que permite reconstruir el punto de falla en el JSON
self.path = path
self.instance = instance
[documentos]class ThemeIdRepeated(BaseValidationError):
def __init__(self, repeated_ids):
# TODO: construcción del error
validator = "repeatedValue"
message = "Los ids {} estan repetidos en mas de un `theme`".format(
repeated_ids)
validator_value = "Chequea ids duplicados en themeTaxonomy"
path = ["catalog", "themeTaxonomy"]
super(ThemeIdRepeated, self).__init__(
validator, message, validator_value, path)
[documentos]class BaseUnexpectedValue(ValueError):
"""El id de una entidad está repetido en el catálogo."""
[documentos] def get_msg(self, entity_name, entity_id, value_type, value_found,
value_expected):
msg = "{} id '{}' figura con {} '{}' en lugar de '{}'".format(
entity_name, entity_id, value_type, value_found, value_expected
)
return msg
[documentos]class DatasetUnexpectedTitle(BaseUnexpectedValue):
def __init__(self, dataset_id, title_found, title_expected):
msg = self.get_msg(
"dataset", dataset_id, "titulo", title_found, title_expected
)
super(DatasetUnexpectedTitle, self).__init__(msg)
[documentos]class DistributionUnexpectedTitle(BaseUnexpectedValue):
def __init__(self, distribution_id, title_found, title_expected):
msg = self.get_msg("distribucion", distribution_id, "titulo",
title_found, title_expected)
super(DistributionUnexpectedTitle, self).__init__(msg)
[documentos]class BaseRepetitionError(ValueError):
"""El id de una entidad está repetido en el catálogo."""
[documentos] def get_msg(self, entity_name, entity_type, entity_id, repeated_entities,
extra_msg=""):
return "Hay mas de 1 {} con {} {}: {} {}".format(
entity_name, entity_type, entity_id, repeated_entities, extra_msg)
[documentos]class DistributionTitleRepetitionError(BaseRepetitionError):
def __init__(self, distribution_title, repeated_distributions,
extra_msg=""):
msg = self.get_msg("distribucion", "titulo", distribution_title,
repeated_distributions, extra_msg)
super(DistributionTitleRepetitionError, self).__init__(msg)
[documentos]class BaseNonExistentError(ValueError):
"""El id de una entidad no existe en el catálogo."""
[documentos] def get_msg(self, entity_name, entity_type, entity_id, extra_msg=""):
return "No hay {} con {} {} {}".format(
entity_name, entity_type, entity_id, extra_msg)
[documentos]class DistributionTitleNonExistentError(BaseNonExistentError):
def __init__(self, distribution_title, dataset_id, extra_msg=""):
msg = self.get_msg("distribucion", "titulo", distribution_title,
extra_msg)
super(DistributionTitleNonExistentError, self).__init__(msg)