Source code for pyexpressionatlas.exceptions
"""Custom exceptions for Expression Atlas client."""
from __future__ import annotations
[docs]
class ExpressionAtlasError(Exception):
"""Base exception for Expression Atlas errors."""
[docs]
class InvalidAccessionError(ExpressionAtlasError):
"""Raised when an experiment accession is invalid."""
[docs]
def __init__(self, accession: str) -> None:
self.accession = accession
super().__init__(
f'"{accession}" does not look like an ArrayExpress/BioStudies '
"experiment accession. Expected format: E-XXXX-#### (e.g., E-MTAB-1624)"
)
[docs]
class DownloadError(ExpressionAtlasError):
"""Raised when experiment download fails."""
[docs]
def __init__(self, accession: str, reason: str) -> None:
self.accession = accession
self.reason = reason
super().__init__(
f"Error downloading experiment {accession}: {reason}. "
f"Check https://www.ebi.ac.uk/gxa/experiments/{accession} or "
"contact https://www.ebi.ac.uk/about/contact/support/gxa"
)
[docs]
class APIError(ExpressionAtlasError):
"""Raised when BioStudies API request fails."""
[docs]
def __init__(self, status_code: int, message: str | None = None) -> None:
self.status_code = status_code
self.message = message
msg = f"BioStudies API error (HTTP {status_code})"
if message:
msg += f": {message}"
msg += ". Please try again later or contact https://www.ebi.ac.uk/about/contact/support/gxa"
super().__init__(msg)