Skip to content

exceptions

exceptions

Provide exception classes for the itkdb package.

BadJSON

BadJSON(
    response: requests.Response,
    additional_message: str | None = None,
)

Bases: ResponseException

Indicate the response did not contain valid JSON.

Source code in src/itkdb/exceptions.py
def __init__(
    self, response: requests.Response, additional_message: str | None = None
):
    """Initialize a ResponseException instance.
    :param response: A requests.response instance.
    """
    self.response: requests.Response = response
    message = f"received {response.status_code} HTTP response for following request\n{pretty_print(response.request)}"

    try:
        if additional_message is None:
            additional_message = json.dumps(response.json(), indent=2)

    except JSONDecodeError:
        additional_message = response.text.strip()

    if additional_message:
        if "text/html" in response.headers.get("content-type", ""):
            additional_message = html2text(additional_message)

        message = (
            f"{message}\n\nThe following details may help:\n{additional_message}"
        )
    super().__init__(message)

BadRequest

BadRequest(
    response: requests.Response,
    additional_message: str | None = None,
)

Bases: ResponseException

Indicate invalid parameters for the request.

Source code in src/itkdb/exceptions.py
def __init__(
    self, response: requests.Response, additional_message: str | None = None
):
    """Initialize a ResponseException instance.
    :param response: A requests.response instance.
    """
    self.response: requests.Response = response
    message = f"received {response.status_code} HTTP response for following request\n{pretty_print(response.request)}"

    try:
        if additional_message is None:
            additional_message = json.dumps(response.json(), indent=2)

    except JSONDecodeError:
        additional_message = response.text.strip()

    if additional_message:
        if "text/html" in response.headers.get("content-type", ""):
            additional_message = html2text(additional_message)

        message = (
            f"{message}\n\nThe following details may help:\n{additional_message}"
        )
    super().__init__(message)

Conflict

Conflict(
    response: requests.Response,
    additional_message: str | None = None,
)

Bases: ResponseException

Indicate a conflicting change in the target resource.

Source code in src/itkdb/exceptions.py
def __init__(
    self, response: requests.Response, additional_message: str | None = None
):
    """Initialize a ResponseException instance.
    :param response: A requests.response instance.
    """
    self.response: requests.Response = response
    message = f"received {response.status_code} HTTP response for following request\n{pretty_print(response.request)}"

    try:
        if additional_message is None:
            additional_message = json.dumps(response.json(), indent=2)

    except JSONDecodeError:
        additional_message = response.text.strip()

    if additional_message:
        if "text/html" in response.headers.get("content-type", ""):
            additional_message = html2text(additional_message)

        message = (
            f"{message}\n\nThe following details may help:\n{additional_message}"
        )
    super().__init__(message)

DuplicateObjectsInDB

Bases: ITkDBException

Indicate duplicate checker found a duplicate item when not allowing for duplicates.

DuplicateTestRuns

Bases: DuplicateObjectsInDB

Indicate that duplicate test runs were found.

Forbidden

Forbidden(response)

Bases: ResponseException

Indicate the authentication is not permitted for the request.

Source code in src/itkdb/exceptions.py
def __init__(self, response):
    additional_message = None

    with suppress(JSONDecodeError):
        additional_message = (
            response.json()
            .get("uuAppErrorMap", {})
            .get("uu-app-workspace/authorization/userIsNotAuthorized", {})
            .get("message", None)
        )
    super().__init__(response, additional_message)

ITkDBException

Bases: Exception

Base exception class for exceptions that occur within this package.

InvalidInvocation

Bases: ITkDBException

Indicate that the code to execute cannot be completed.

NotFound

NotFound(
    response: requests.Response,
    additional_message: str | None = None,
)

Bases: ResponseException

Indicate that the requested URL was not found.

Source code in src/itkdb/exceptions.py
def __init__(
    self, response: requests.Response, additional_message: str | None = None
):
    """Initialize a ResponseException instance.
    :param response: A requests.response instance.
    """
    self.response: requests.Response = response
    message = f"received {response.status_code} HTTP response for following request\n{pretty_print(response.request)}"

    try:
        if additional_message is None:
            additional_message = json.dumps(response.json(), indent=2)

    except JSONDecodeError:
        additional_message = response.text.strip()

    if additional_message:
        if "text/html" in response.headers.get("content-type", ""):
            additional_message = html2text(additional_message)

        message = (
            f"{message}\n\nThe following details may help:\n{additional_message}"
        )
    super().__init__(message)

Redirect

Redirect(response)

Bases: ResponseException

Indicate the request resulted in a redirect.

This class adds the attribute path, which is the path to which the response redirects.

:param response: A requests.response instance containing a location header.

Source code in src/itkdb/exceptions.py
def __init__(self, response):
    """Initialize a Redirect exception instance.

    :param response: A requests.response instance containing a location
    header.

    """
    path = urlparse(response.headers["location"]).path
    self.path = path[:-5] if path.endswith(".json") else path
    self.response = response
    super().__init__(f"Redirect to {self.path}")

path instance-attribute

path = path[:-5] if endswith('.json') else path

response instance-attribute

response = response

ResponseException

ResponseException(
    response: requests.Response,
    additional_message: str | None = None,
)

Bases: ITkDBException

Indicate that there was an error with the completed HTTP request.

Source code in src/itkdb/exceptions.py
def __init__(
    self, response: requests.Response, additional_message: str | None = None
):
    """Initialize a ResponseException instance.
    :param response: A requests.response instance.
    """
    self.response: requests.Response = response
    message = f"received {response.status_code} HTTP response for following request\n{pretty_print(response.request)}"

    try:
        if additional_message is None:
            additional_message = json.dumps(response.json(), indent=2)

    except JSONDecodeError:
        additional_message = response.text.strip()

    if additional_message:
        if "text/html" in response.headers.get("content-type", ""):
            additional_message = html2text(additional_message)

        message = (
            f"{message}\n\nThe following details may help:\n{additional_message}"
        )
    super().__init__(message)

response instance-attribute

response: Response = response

ServerError

ServerError(
    response: requests.Response,
    additional_message: str | None = None,
)

Bases: ResponseException

Indicate issues on the server end preventing request fulfillment.

Source code in src/itkdb/exceptions.py
def __init__(
    self, response: requests.Response, additional_message: str | None = None
):
    """Initialize a ResponseException instance.
    :param response: A requests.response instance.
    """
    self.response: requests.Response = response
    message = f"received {response.status_code} HTTP response for following request\n{pretty_print(response.request)}"

    try:
        if additional_message is None:
            additional_message = json.dumps(response.json(), indent=2)

    except JSONDecodeError:
        additional_message = response.text.strip()

    if additional_message:
        if "text/html" in response.headers.get("content-type", ""):
            additional_message = html2text(additional_message)

        message = (
            f"{message}\n\nThe following details may help:\n{additional_message}"
        )
    super().__init__(message)

SpecialError

SpecialError(response)

Bases: ResponseException

Indicate syntax or spam-prevention issues.

:param response: A requests.response instance containing a message and a list of special errors.

Source code in src/itkdb/exceptions.py
def __init__(self, response):
    """Initialize a SpecialError exception instance.

    :param response: A requests.response instance containing a message
    and a list of special errors.

    """
    self.response = response

    resp_dict = self.response.json()  # assumes valid JSON
    self.message = resp_dict.get("message", "")
    self.reason = resp_dict.get("reason", "")
    self.special_errors = resp_dict.get("special_errors", [])
    super().__init__(f"Special error {self.message!r}")

message instance-attribute

message = get('message', '')

reason instance-attribute

reason = get('reason', '')

response instance-attribute

response = response

special_errors instance-attribute

special_errors = get('special_errors', [])

TooLarge

TooLarge(
    response: requests.Response,
    additional_message: str | None = None,
)

Bases: ResponseException

Indicate that the request data exceeds the allowed limit.

Source code in src/itkdb/exceptions.py
def __init__(
    self, response: requests.Response, additional_message: str | None = None
):
    """Initialize a ResponseException instance.
    :param response: A requests.response instance.
    """
    self.response: requests.Response = response
    message = f"received {response.status_code} HTTP response for following request\n{pretty_print(response.request)}"

    try:
        if additional_message is None:
            additional_message = json.dumps(response.json(), indent=2)

    except JSONDecodeError:
        additional_message = response.text.strip()

    if additional_message:
        if "text/html" in response.headers.get("content-type", ""):
            additional_message = html2text(additional_message)

        message = (
            f"{message}\n\nThe following details may help:\n{additional_message}"
        )
    super().__init__(message)

UnavailableForLegalReasons

UnavailableForLegalReasons(
    response: requests.Response,
    additional_message: str | None = None,
)

Bases: ResponseException

Indicate that the requested URL is unavailable due to legal reasons.

Source code in src/itkdb/exceptions.py
def __init__(
    self, response: requests.Response, additional_message: str | None = None
):
    """Initialize a ResponseException instance.
    :param response: A requests.response instance.
    """
    self.response: requests.Response = response
    message = f"received {response.status_code} HTTP response for following request\n{pretty_print(response.request)}"

    try:
        if additional_message is None:
            additional_message = json.dumps(response.json(), indent=2)

    except JSONDecodeError:
        additional_message = response.text.strip()

    if additional_message:
        if "text/html" in response.headers.get("content-type", ""):
            additional_message = html2text(additional_message)

        message = (
            f"{message}\n\nThe following details may help:\n{additional_message}"
        )
    super().__init__(message)

UnhandledResponse

UnhandledResponse(
    response: requests.Response,
    additional_message: str | None = None,
)

Bases: ResponseException

Indicate a response status code we have not dealt with yet.

Source code in src/itkdb/exceptions.py
def __init__(
    self, response: requests.Response, additional_message: str | None = None
):
    """Initialize a ResponseException instance.
    :param response: A requests.response instance.
    """
    self.response: requests.Response = response
    message = f"received {response.status_code} HTTP response for following request\n{pretty_print(response.request)}"

    try:
        if additional_message is None:
            additional_message = json.dumps(response.json(), indent=2)

    except JSONDecodeError:
        additional_message = response.text.strip()

    if additional_message:
        if "text/html" in response.headers.get("content-type", ""):
            additional_message = html2text(additional_message)

        message = (
            f"{message}\n\nThe following details may help:\n{additional_message}"
        )
    super().__init__(message)