Skip to content

Commit

Permalink
feat(exception): add ModuleImportError for optional module import error
Browse files Browse the repository at this point in the history
PR Closed: #544
  • Loading branch information
Lee-000 committed May 14, 2021
1 parent 0d1a1cc commit 927b9d7
Show file tree
Hide file tree
Showing 7 changed files with 76 additions and 8 deletions.
23 changes: 23 additions & 0 deletions tensorbay/exception.py
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,29 @@ def __str__(self) -> str:
return self._message


class ModuleImportError(OpenDatasetError, ModuleNotFoundError):
"""This class defines the exception for import error of optional module in opendataset module.
Arguments:
module_name: The name of the optional module.
package_name: The package name of the optional module.
"""

def __init__(self, module_name: str, package_name: Optional[str] = None) -> None:
super().__init__()
self._module_name = module_name
self._package_name = package_name if package_name else module_name

def __str__(self) -> str:
return (
f"No module named {self._module_name}."
"\n"
f'\n To install the module, please run: "pip3 install {self._package_name}"'
"\n"
)


class TBRNError(TensorBayException):
"""This class defines the exception for invalid TBRN.
Expand Down
11 changes: 9 additions & 2 deletions tensorbay/opendataset/AnimalPose/loader.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from typing import Iterable, Iterator, List, Tuple

from ...dataset import Data, Dataset
from ...exception import ModuleImportError
from ...geometry import Keypoint2D
from ...label import LabeledBox2D, LabeledKeypoints2D
from .._utility import glob
Expand Down Expand Up @@ -96,7 +97,10 @@ def AnimalPose5(path: str) -> Dataset:


def _get_data_part1(root_path: str, aniamls: Iterable[str]) -> Iterator[Data]:
import xmltodict # pylint: disable=import-outside-toplevel
try:
import xmltodict # pylint: disable=import-outside-toplevel
except ModuleNotFoundError as error:
raise ModuleImportError(error.name) from error # type: ignore[arg-type]

for animal in aniamls:
for image_path in glob(os.path.join(root_path, "keypoint_image_part1", animal, "*.jpg")):
Expand Down Expand Up @@ -138,7 +142,10 @@ def _get_data_part1(root_path: str, aniamls: Iterable[str]) -> Iterator[Data]:


def _get_data_part2(root_path: str, aniamls: Iterable[str]) -> Iterator[Data]:
import xmltodict # pylint: disable=import-outside-toplevel
try:
import xmltodict # pylint: disable=import-outside-toplevel
except ModuleNotFoundError as error:
raise ModuleImportError(error.name) from error # type: ignore[arg-type]

for animal in aniamls:
for image_path in glob(os.path.join(root_path, "animalpose_image_part2", animal, "*.jpeg")):
Expand Down
9 changes: 8 additions & 1 deletion tensorbay/opendataset/BSTLD/loader.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import os

from ...dataset import Data, Dataset
from ...exception import ModuleImportError
from ...label import LabeledBox2D

DATASET_NAME = "BSTLD"
Expand Down Expand Up @@ -48,11 +49,17 @@ def BSTLD(path: str) -> Dataset:
Arguments:
path: The root directory of the dataset.
Raises:
ModuleImportError: When the module "yaml" can not be found.
Returns:
Loaded :class:`~tensorbay.dataset.dataset.Dataset` instance.
"""
import yaml # pylint: disable=import-outside-toplevel
try:
import yaml # pylint: disable=import-outside-toplevel
except ModuleNotFoundError as error:
raise ModuleImportError(error.name, "pyyaml") from error # type: ignore[arg-type]

root_path = os.path.abspath(os.path.expanduser(path))

Expand Down
6 changes: 5 additions & 1 deletion tensorbay/opendataset/CADC/loader.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import quaternion

from ...dataset import Data, Frame, FusionDataset
from ...exception import ModuleImportError
from ...label import LabeledBox3D
from ...sensor import Camera, Lidar, Sensors
from .._utility import glob
Expand Down Expand Up @@ -183,7 +184,10 @@ def _load_labels(boxes: List[Dict[str, Any]]) -> List[LabeledBox3D]:


def _load_sensors(calib_path: str) -> Sensors:
import yaml # pylint: disable=import-outside-toplevel
try:
import yaml # pylint: disable=import-outside-toplevel
except ModuleNotFoundError as error:
raise ModuleImportError(error.name, "pyyaml") from error # type: ignore[arg-type]

sensors = Sensors()

Expand Down
9 changes: 8 additions & 1 deletion tensorbay/opendataset/FLIC/loader.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from typing import Any, Dict, Iterator, Tuple

from ...dataset import Data, Dataset
from ...exception import ModuleImportError
from ...label import Classification, LabeledBox2D, LabeledKeypoints2D

DATASET_NAME = "FLIC"
Expand All @@ -31,11 +32,17 @@ def FLIC(path: str) -> Dataset:
Arguments:
path: The root directory of the dataset.
Raises:
ModuleImportError: When the module "scipy" can not be found.
Returns:
Loaded :class:`~tensorbay.dataset.dataset.Dataset` instance.
"""
from scipy.io import loadmat # pylint: disable=import-outside-toplevel
try:
from scipy.io import loadmat # pylint: disable=import-outside-toplevel
except ModuleNotFoundError as error:
raise ModuleImportError(error.name) from error # type: ignore[arg-type]

root_path = os.path.abspath(os.path.expanduser(path))

Expand Down
17 changes: 15 additions & 2 deletions tensorbay/opendataset/Flower/loader.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import os

from ...dataset import Data, Dataset
from ...exception import ModuleImportError
from ...label import Classification

DATASET_NAME_17 = "Flower17"
Expand Down Expand Up @@ -36,11 +37,17 @@ def Flower17(path: str) -> Dataset:
Arguments:
path: The root directory of the dataset.
Raises:
ModuleImportError: When the module "scipy" can not be found.
Returns:
Loaded :class:`~tensorbay.dataset.dataset.Dataset` instance.
"""
from scipy.io import loadmat # pylint: disable=import-outside-toplevel
try:
from scipy.io import loadmat # pylint: disable=import-outside-toplevel
except ModuleNotFoundError as error:
raise ModuleImportError(error.name) from error # type: ignore[arg-type]

root_path = os.path.abspath(os.path.expanduser(path))
segment_info = loadmat(os.path.join(root_path, "datasplits.mat"))
Expand Down Expand Up @@ -78,11 +85,17 @@ def Flower102(path: str) -> Dataset:
Arguments:
path: The root directory of the dataset.
Raises:
ModuleImportError: When the module "scipy" can not be found.
Returns:
Loaded :class:`~tensorbay.dataset.dataset.Dataset` instance.
"""
from scipy.io import loadmat # pylint: disable=import-outside-toplevel
try:
from scipy.io import loadmat # pylint: disable=import-outside-toplevel
except ModuleNotFoundError as error:
raise ModuleImportError(error.name) from error # type: ignore[arg-type]

root_path = os.path.abspath(os.path.expanduser(path))
labels = loadmat(os.path.join(root_path, "imagelabels.mat"))["labels"][0]
Expand Down
9 changes: 8 additions & 1 deletion tensorbay/opendataset/LeedsSportsPose/loader.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import os

from ...dataset import Data, Dataset
from ...exception import ModuleImportError
from ...geometry import Keypoint2D
from ...label import LabeledKeypoints2D
from .._utility import glob
Expand All @@ -32,11 +33,17 @@ def LeedsSportsPose(path: str) -> Dataset:
Arguments:
path: The root directory of the dataset.
Raises:
ModuleImportError: When the module "scipy" can not be found.
Returns:
Loaded :class:`~tensorbay.dataset.dataset.Dataset` instance.
"""
from scipy.io import loadmat # pylint: disable=import-outside-toplevel
try:
from scipy.io import loadmat # pylint: disable=import-outside-toplevel
except ModuleNotFoundError as error:
raise ModuleImportError(error.name) from error # type: ignore[arg-type]

root_path = os.path.abspath(os.path.expanduser(path))

Expand Down

0 comments on commit 927b9d7

Please sign in to comment.