Source code for canlib.kvamemolibxml.exceptions

import ctypes as ct

from ..exceptions import DllException
from .constants import XML_ERROR_MESSAGE_LENGTH


def kva_error(status):
    """Create and return an exception object corresponding to `status`"""
    return KvaGeneralError(status)


[docs]class KvaError(DllException): @staticmethod def _get_error_text(status): try: from .wrapper import dll except ImportError: msg = "Unknown error text" else: try: msg_buf = ct.create_string_buffer(255) dll.kvaXmlGetErrorText(status, msg_buf, ct.sizeof(msg_buf)) msg = msg_buf.value.decode('utf-8') except: msg = "Unknown error text" try: msg_buf = ct.create_string_buffer(XML_ERROR_MESSAGE_LENGTH) dll.kvaXmlGetLastError(msg_buf, ct.sizeof(msg_buf), ct.byref(status)) last = msg_buf.value.decode('utf-8') except: last = "" msg += ' (%d)' % status if last: msg += '\n' + last return msg
class KvaGeneralError(KvaError): """A kvamemolibxml error that does not (yet) have its own Exception WARNING: Do not explicitly catch this error, instead catch `KvaError`. Your error may at any point in the future get its own exception class, and so will no longer be of this type. The actual status code that raised any `KvaError` can always be accessed through a `status` attribute. """ def __init__(self, status): self.status = status super(KvaGeneralError, self).__init__()