|
|
@@ -6,11 +6,11 @@
|
|
|
import logging
|
|
|
from qgis.core import QgsProject
|
|
|
|
|
|
-from core.cerberus_extend import CerberusErrorHandler, \
|
|
|
+from core.cerberus_ import CerberusErrorHandler, \
|
|
|
_translate_messages, ExtendedValidator
|
|
|
from core.model import QgsModel
|
|
|
from core.validation_errors import CRITICAL, DataError, GeomTypeError, BoundingBoxError, \
|
|
|
- MissingLayer, WrongSrid
|
|
|
+ MissingLayer, WrongSrid, InvalidGeometry, TechnicalValidationError
|
|
|
|
|
|
|
|
|
logger = logging.getLogger("mncheck")
|
|
|
@@ -36,13 +36,15 @@ class BaseValidator():
|
|
|
self.dt = 0
|
|
|
|
|
|
def checkpoint(self, title):
|
|
|
+ logger.info(f"Checkpoint: {title}")
|
|
|
self.checkpoints.append(Checkpoint(title, self._current_checkpoint_valid))
|
|
|
self._current_checkpoint_valid = True
|
|
|
if self.errors:
|
|
|
self.valid = False
|
|
|
if self.critical_happened():
|
|
|
+ logger.info("Contrôle de données interrompu en raison d'une erreur critique dans les données")
|
|
|
raise ValidatorInterruption()
|
|
|
-
|
|
|
+
|
|
|
def critical_happened(self):
|
|
|
return any([err.level == CRITICAL for err in self.errors])
|
|
|
|
|
|
@@ -78,6 +80,9 @@ class BaseValidator():
|
|
|
except ValidatorInterruption:
|
|
|
raise
|
|
|
except:
|
|
|
+# logger.error("".join(traceback.format_exception(*sys.exc_info())))
|
|
|
+ logger.exception("Une erreur s'est produite")
|
|
|
+ self.log_error(TechnicalValidationError("Contrôle des données interrompu"))
|
|
|
self.checkpoint("Validation Métier [interrompu]")
|
|
|
|
|
|
def _load_layers(self):
|
|
|
@@ -100,8 +105,9 @@ class BaseValidator():
|
|
|
item = model(feature)
|
|
|
|
|
|
self.dataset[model].append(item)
|
|
|
-
|
|
|
+
|
|
|
|
|
|
+
|
|
|
def _structure_validation(self):
|
|
|
|
|
|
for model in self.models:
|
|
|
@@ -112,7 +118,7 @@ class BaseValidator():
|
|
|
|
|
|
# geom valid
|
|
|
if not item.is_geometry_valid():
|
|
|
- self.log_error(GeomTypeError("La géométrie de l'objet est invalide".format(), layername=model.layername, field="geom"))
|
|
|
+ self.log_error(InvalidGeometry("La géométrie de l'objet est invalide: {}".format(item), layername=model.layername, field="geom"))
|
|
|
|
|
|
# geom type
|
|
|
if item.get_geom_type() != model.geom_type:
|
|
|
@@ -144,7 +150,7 @@ class BaseValidator():
|
|
|
|
|
|
for err in self.errors:
|
|
|
if not err.name in report["errors"]:
|
|
|
- report["errors"][err.name] = {"help": err.help, "order_": err.order_, "list": []}
|
|
|
+ report["errors"][err.name] = {"help": err.help, "order_": err.order_, "level": err.level, "list": []}
|
|
|
|
|
|
err_report = {"layername": err.layername or "-",
|
|
|
"field": err.field or "-",
|