#!/usr/bin/env python3
#
# Copyright 2021 Graviti. Licensed under MIT License.
#
"""Method check_basic.
:meth:`check_basic` checks whether :class:`~tensorbay.dataset.dataset.Dataset`
or :class:`~tensorbay.dataset.dataset.FusionDataset`
is empty and whether the :class:`~tensorbay.dataset.segment.Segment`
or :class:`~tensorbay.dataset.dataset.FusionDataset` in the object is empty.
"""
from typing import Iterator, Union
from ..dataset import Dataset, FusionDataset
from .report import Error
[docs]class BasicError(Error): # pylint: disable=too-few-public-methods
"""The base class of the basic error.
Arguments:
name: The dataset or segment name which has error.
"""
def __init__(self, name: str) -> None:
self._name = name
[docs]class EmptyDatasetError(BasicError): # pylint: disable=too-few-public-methods
"""The health check function for empty dataset.
This error is raised to indicate that :class:`~tensorbay.dataset.dataset.Dataset`
or :class:`~tensorbay.dataset.dataset.FusionDataset` is empty.
"""
def __str__(self) -> str:
return f"Dataset '{self._name}' is empty"
[docs]class EmptySegmentError(BasicError): # pylint: disable=too-few-public-methods
"""The health check function for empty segment.
This error is raised to indicate that :class:`~tensorbay.dataset.segment.Segment`
or :class:`~tensorbay.dataset.dataset.FusionDataset` is empty.
"""
def __str__(self) -> str:
return f"Segment '{self._name}' is empty"
[docs]def check_basic(dataset: Union[Dataset, FusionDataset]) -> Iterator[BasicError]:
"""The health check function for basic error.
Arguments:
dataset: The :class:`~tensorbay.dataset.dataset.Dataset` or
:class:`~tensorbay.dataset.dataset.FusionDataset` needs to be checked.
Yields:
BasicError indicating that :class:`~tensorbay.dataset.dataset.Dataset`,
:class:`~tensorbay.dataset.dataset.FusionDataset`,
:class:`~tensorbay.dataset.segment.Segment` or
:class:`~tensorbay.dataset.segment.FusionSegment` is empty.
"""
if not dataset:
yield EmptyDatasetError(dataset.name)
return
for segment in dataset:
if not segment:
yield EmptySegmentError(segment.name)