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}")
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)
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}")
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)