Source code for udsoncan.exceptions

__all__ = [
    'TimeoutException',
    'NegativeResponseException',
    'InvalidResponseException',
    'UnexpectedResponseException',
    'ConfigError'
]
from udsoncan.Response import Response
from typing import Any


[docs]class TimeoutException(Exception): """ Simple extension of ``Exception`` with no additional property. Raised when a timeout in the communication happens. """ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs)
[docs]class NegativeResponseException(Exception): """ Raised when the server returns a negative response (response code starting by 0x7F). The response that triggered the exception is available in ``e.response`` :param response: The response that triggered the exception :type response: :ref:`Response<Response>` """ response: Response def __init__(self, response: Response, *args, **kwargs): self.response = response msg = self.make_msg(response) if len(args) > 0: msg += " " + str(args[0]) args = tuple(list(args)[1:]) super().__init__(msg, *args, **kwargs) def make_msg(self, response: Response): servicename = response.service.get_name() + " " if response.service is not None else "" codestr = "" if response.code is not None: codestr = " (0x%x)" % response.code return "%sservice execution returned a negative response %s%s" % (servicename, response.code_name, codestr)
[docs]class InvalidResponseException(Exception): """ Raised when a service fails to decode a server response data. A bad message length or a value that is out of range may both be valid causes. The response that triggered the exception is available in ``e.response`` :param response: The response that triggered the exception :type response: :ref:`Response<Response>` """ response: Response def __init__(self, response, *args, **kwargs): self.response = response msg = self.make_msg(response) if len(args) > 0: msg += " " + str(args[0]) args = tuple(list(args)[1:]) super().__init__(msg, *args, **kwargs) def make_msg(self, response: Response): servicename = response.service.get_name() + " " if response.service is not None else "" reason = "" if response.valid else " Reason : %s" % (response.invalid_reason) return "%sservice execution returned an invalid response.%s" % (servicename, reason)
[docs]class UnexpectedResponseException(Exception): """ Raised when the client receives a valid response but considers the one received to not be the expected response. The response that triggered the exception is available in ``e.response`` :param response: The response that triggered the exception :type response: :ref:`Response<Response>` :param details: Additional details about the error :type details: string """ response: Response def __init__(self, response: Response, details="<No details given>", *args, **kwargs): self.response = response msg = self.make_msg(response, details) if len(args) > 0: msg += " " + str(args[0]) args = tuple(list(args)[1:]) super().__init__(msg, *args, **kwargs) def make_msg(self, response: Response, details: str): servicename = response.service.get_name() + " " if response.service is not None else "" return "%sservice execution returned a valid response but unexpected. Details : %s " % (servicename, details)
[docs]class ConfigError(Exception): """ Raised when a bad configuration element is encountered. :param key: The configuration key that failed to resolve properly :type key: object """ key: Any def __init__(self, key: Any, msg="<No details given>", *args, **kwargs): self.key = key super().__init__(msg, *args, **kwargs)