Source code for ctdfjorder.exceptions.exceptions

import logging
import warnings

logger = logging.getLogger("ctdfjorder")


[docs] class CTDError(Exception): """ Base exception class for CTD-related errors. Parameters ---------- message : str Explanation of the error. filename : str, optional Input dataset which caused the error. """ def __init__(self, message, filename=None): full_message = f"{filename} - {message}" if filename else message super().__init__(full_message)
[docs] class NoSamplesError(CTDError): """ Exception raised when a function that requires samples as input is called on a CTD object with no samples. Parameters ---------- filename : str, optional Input dataset which caused the error. """ def __init__(self, filename=None, func=None): super().__init__(message=f"Cannot call {func} on a CTD object with no samples.", filename=filename)
[docs] class NoLocationError(CTDError): """ Exception raised when no location could be found. Parameters ---------- filename : str, optional Input dataset which caused the error. """ def __init__(self, filename=None): super().__init__("No location could be found", filename)
[docs] class DensityCalculationError(CTDError): """ Exception raised when density calculation fails. Parameters ---------- filename : str, optional Input dataset which caused the error. """ def __init__(self, filename=None): super().__init__("Could not calculate density on this dataset", filename)
[docs] class SalinityCalculationError(CTDError): """ Exception raised when salinity absolute calculation fails. Parameters ---------- filename : str, optional Input dataset which caused the error. """ def __init__(self, filename=None): super().__init__("Could not calculate salinity absolute on this dataset", filename)
[docs] class MissingMasterSheetError(CTDError): """ Exception raised when no master sheet is provided. Parameters ---------- filename : str, optional Input dataset which caused the error. """ def __init__(self, filename=None): super().__init__("No mastersheet provided, could not update the file's missing location data", filename)
[docs] class CorruptMasterSheetError(CTDError): """ Exception raised when master sheet is corrupt. Parameters ---------- filename : str, optional Input dataset which caused the error. """ def __init__(self, filename=None): super().__init__(f"Could not read mastersheet data from mastersheet." f" If on mac download your mastersheet as a csv not an xlsx.", filename)
[docs] class CTDCorruptError(CTDError): """ Exception raised when a Ruskin file is corrupted and cannot be read. Parameters ---------- filename : str, optional Input dataset which caused the error. """ def __init__(self, filename=None): super().__init__("File is corrupted or incomplete and could not be read", filename)
[docs] class InvalidLocationDataError(CTDError): """ Exception raised when location data is invalid, possibly due to malformed master sheet data. Parameters ---------- filename : str, optional Input dataset which caused the error. """ def __init__(self, filename=None): super().__init__("Location data invalid, probably due to malformed master sheet data", filename)
[docs] class MissingTimestampError(CTDError): """ Exception raised when there is no timestamp in the file or master sheet. Parameters ---------- filename : str, optional Input dataset which caused the error. """ def __init__(self, filename=None, source="file"): message = ( "No timestamp in file, could not get location" if source == "file" else "No timestamp in master sheet, could not get location" ) super().__init__(message, filename)
[docs] class MLDDepthRangeError(CTDError): """ Exception raised when the depth range is insufficient to calculate Mixed Layer Depth (MLD). Parameters ---------- filename : str, optional Input dataset which caused the error. """ def __init__(self, filename=None): super().__init__("Insufficient depth range to calculate MLD", filename)
[docs] class InvalidCTDFilenameError(CTDError): """ Exception raised when a CTD filename has an invalid ending. Parameters ---------- filename : str, optional Input dataset which caused the error. """ def __init__(self, filename=None): super().__init__("CTD filename must end in '.rsk' or '.csv'", filename)
[docs] def raise_warning_calculatuion(message, filename=None): """ CTD calculation warning function. Parameters ---------- filename : str, default None Input dataset which caused the error. message : str Explanation of the error. """ warnings.warn(message=f"{filename} - {message}", category=RuntimeWarning) logger.warning(f"{filename} - {message}")
[docs] def raise_warning_native_location(message, filename=None): """ CTD location warning function. Parameters ---------- filename : str, default None Input dataset which caused the error. message : str Explanation of the error. """ warnings.warn(message=f"{filename} - {message}", category=RuntimeWarning) logger.warning(f"{filename} - {message}")