Source code for otoole.exceptions
from typing import List, Union
[docs]class OtooleValidationError(OtooleException):
"""Input data is invalid
Arguments
---------
resource : str
Name of the resource which is invalid
message : str
Error message
"""
def __init__(self, resource, message):
self.resource = resource
self.message = message
[docs]class OtooleRelationError(OtooleException):
"""Relations between input data is not correct
Arguments
---------
resource : str
Name of the resource which is invalid
foreign_resource : str
Name of the resource which is invalid
message : str
Error message
"""
def __init__(self, resource, foreign_resource, message):
self.resource = resource
self.foreign_resource = foreign_resource
self.message = message
[docs]class OtooleConfigFileError(OtooleException):
"""Config file validation error
Arguments
---------
message: str
Message to display to users
"""
def __init__(self, message: str) -> None:
self.message = message
super().__init__(message)
def __str__(self):
return f"{self.message}"
[docs]class OtooleExcelNameLengthError(OtooleException):
"""Invalid tab name for writing to Excel."""
def __init__(
self,
name: str,
message: str = "Parameter name must be less than 31 characters when writing to Excel",
) -> None:
self.name = name
self.message = message
super().__init__(self.message)
def __str__(self):
return f"{self.name} -> {self.message}"
[docs]class OtooleNameMismatchError(OtooleException):
"""Names not consistent between read in data and config file"""
def __init__(
self,
name: Union[List, str],
) -> None:
if isinstance(name, list):
self.message = "Names not consistent between data and config file"
self.name = ", ".join(sorted(name))
elif isinstance(name, str):
self.name = name
self.message = "Name not consistent between data and config file"
else:
raise TypeError("Incorrect type passed to OtooleNameMismatchError")
super().__init__(self.message)
def __str__(self):
return f"{self.message}:\n\n{self.name}.\n\nUpdate config or data with matching names."
[docs]class OtooleDeprecationError(OtooleException):
"""New version of otoole does drops this feature support
Arguments
---------
resource : str
Name of the resource which is invalid
message : str
Error message
"""
def __init__(self, resource, message):
self.resource = resource
self.message = message
def __str__(self):
return f"{self.resource} -> {self.message}"
[docs]class OtooleSetupError(OtooleException):
"""Setup data already exists
Arguments
---------
resource : str
Name of the resource which is invalid
message : str
Error message
"""
def __init__(
self,
resource,
message="Data already exists. Delete file/directory or pass the --overwrite flag",
):
self.resource = resource
self.message = message
def __str__(self):
return f"{self.resource} -> {self.message}"
[docs]class OtooleIndexError(OtooleException):
"""Index data not consistent between data and config file
Arguments
---------
resource : str
Name of the resource which is invalid
config_indices: List[str]
Indices from config file
data_indices: List[str]
Indices from input data
"""
def __init__(self, resource, config_indices, data_indices):
self.resource = resource
self.config_indices = config_indices
self.data_indices = data_indices
self.message = "Indices inconsistent between config and data"
def __str__(self):
return f"{self.resource} -> {self.message}. Config indices are {self.config_indices}. Data indices are {self.data_indices}."
[docs]class OtooleError(OtooleException):
"""General purpose error
Arguments
---------
resource : str
Name of the resource which is invalid
message : str
Error message
"""
def __init__(self, resource, message):
self.resource = resource
self.message = message
def __str__(self):
return f"{self.resource} -> {self.message}"