Source code for dclab.cli.task_verify_dataset

"""Verify dataset integrity"""
import argparse
import pathlib
import sys

from ..rtdc_dataset import check_dataset, fmt_tdms
from .._version import version

from . import common


[docs] def verify_dataset(path_in=None): """Perform checks on experimental datasets""" if path_in is None: parser = verify_dataset_parser() args = parser.parse_args() path_in = pathlib.Path(args.path).resolve() if not path_in.exists(): common.print_violation(f"File not found: {path_in}") return sys.exit(4) else: common.print_info(f"Checking {path_in}") # The exit status of this script. Non-zero exit status means: # 1: alerts # 2: violations # 3: alerts and violations # 4: other error exit_status = 4 try: viol, aler, info = check_dataset(path_in) except fmt_tdms.InvalidTDMSFileFormatError: common.print_violation("Invalid tdms file format!") except fmt_tdms.IncompleteTDMSFileFormatError: common.print_violation("Incomplete dataset!") except fmt_tdms.ContourIndexingError: common.print_violation("Invalid contour data!") except fmt_tdms.InvalidVideoFileError: common.print_violation("Invalid image data!") except BaseException as e: common.print_violation(f"{e.__class__.__name__}: {', '.join(e.args)}") else: for inf in info: common.print_info(inf) for ale in aler: common.print_alert(ale) for vio in viol: common.print_violation(vio) common.print_info(f"Check Complete: {len(viol)} violations and " + f"{len(aler)} alerts") if aler and viol: exit_status = 3 elif aler: exit_status = 1 elif viol: exit_status = 2 else: # everything is ok exit_status = 0 finally: # return sys.exit for testing (monkeypatched) return sys.exit(exit_status)
def verify_dataset_parser(): descr = "Check experimental datasets for completeness. This command " \ + "is used e.g. to enforce data integrity with Shape-In. The " \ + "following exit codes are defined: ``0: valid dataset``, " \ + "``1: alerts encountered``, ``2: violations encountered``, " \ + "``3: alerts and violations``, ``4: other error``." parser = argparse.ArgumentParser(description=descr) parser.add_argument('path', metavar='PATH', type=str, help='Path to experimental dataset') parser.add_argument('--version', action='version', version=f'dclab-verify-dataset {version}') return parser