Source code for solidipes.validators.curation

from typing import Optional

from ..scanners.scanner import Scanner
from ..scanners.scanner_dtool import ScannerDTool
from ..scanners.scanner_local import ScannerLocal
from ..utils import solidipes_logging as logging
from ..utils.progress import ProgressBar, get_progress_bar
from ..utils.utils import get_path_relative_to_root
from .validator import Validator, add_validation_error

print = logging.invalidPrint
logger = logging.getLogger()


[docs] class CurationValidator(Validator): """Validator for curation.""" def __init__(self, description: str = "All files are valid", **kwargs) -> None: super().__init__(description=description, **kwargs) self._scanner: Optional[Scanner] = None self._first_run = True self.remote = False @property def scanner(self) -> Scanner: if self._scanner is None: type_scanner = ScannerLocal if self.remote: type_scanner = ScannerDTool self._scanner = type_scanner() return self._scanner
[docs] def _validate(self, obj=None) -> bool: loader_tree = self.scanner.get_loader_tree() errors = [] progress = get_progress_bar("Validating files", total=loader_tree.count) with progress: def collect_errors(loader) -> None: path = get_path_relative_to_root(loader.path) if isinstance(progress, ProgressBar): progress.update(advance=1, text=path) if loader.is_valid: return error = f'"{path}" is not valid:' for validation_result in loader.validation_results: if validation_result.valid or validation_result.validator.name == "OntologyIsMatchedValidator": continue for validation_error in validation_result.errors: error += f"\n - {validation_error}" errors.append(error) loader_tree.apply(collect_errors) for error in errors: add_validation_error(error) is_valid = len(errors) == 0 self._first_run = False return is_valid