Source code for clarin.sru.exception
from typing import Optional
from .diagnostic import SRUDiagnostic
# ---------------------------------------------------------------------------
[docs]class SRUException(Exception):
"""An exception raised, if something went wrong processing the
request. For diagnostic codes, see constants in `SRUConstant`.
See also:
SRUConstant
"""
def __init__(
self,
uri: str,
details: Optional[str] = None,
message: Optional[str] = None,
*args
):
if uri is None:
raise TypeError("uri is None")
if not uri.strip():
raise ValueError("uri is empty")
super().__init__(message, *args)
self.uri = uri
self.details = details
def __str__(self):
# check whether no message was supplied
if not self.args[0]:
# check whether this exception was chained (raised as wrapper)
# then use the message of the 'inner' exception
# e.g. with raise SRUException() from exception
if self.__cause__:
return self.__cause__.args[0]
# otherwise get diagnostics message from `uri`
return SRUDiagnostic.get_default_error_message(self.uri)
# message was supplied to constructor
return super().__str__()
[docs] def get_diagnostic(self) -> SRUDiagnostic:
"""Create a SRU diagnostic from this exception."""
return SRUDiagnostic(self.uri, self.details, self.args[0])
# ---------------------------------------------------------------------------
[docs]class SRUConfigException(Exception):
"""An exception raised, if some error occurred with the SRUServer
configuration."""
# ---------------------------------------------------------------------------