diff --git a/can/packer_pyx.pyx b/can/packer_pyx.pyx index 00f83ec..601103a 100644 --- a/can/packer_pyx.pyx +++ b/can/packer_pyx.pyx @@ -20,9 +20,11 @@ cdef class CANPacker: map[int, int] address_to_size def __init__(self, dbc_name): - self.packer = new cpp_CANPacker(dbc_name) self.dbc = dbc_lookup(dbc_name) - + if not self.dbc: + raise RuntimeError("Can't lookup" + dbc_name) + + self.packer = new cpp_CANPacker(dbc_name) num_msgs = self.dbc[0].num_msgs for i in range(num_msgs): msg = self.dbc[0].msgs[i] diff --git a/can/parser.py b/can/parser.py index 107a839..0472211 100644 --- a/can/parser.py +++ b/can/parser.py @@ -1,2 +1,2 @@ -from opendbc.can.parser_pyx import CANParser # pylint: disable=no-name-in-module, import-error -assert CANParser +from opendbc.can.parser_pyx import CANParser, CANDefine # pylint: disable=no-name-in-module, import-error +assert CANParser, CANDefine diff --git a/can/parser_pyx.pyx b/can/parser_pyx.pyx index bd5adf6..083f1cc 100644 --- a/can/parser_pyx.pyx +++ b/can/parser_pyx.pyx @@ -17,7 +17,6 @@ from collections import defaultdict cdef int CAN_INVALID_CNT = 5 - cdef class CANParser: cdef: cpp_CANParser *can @@ -37,10 +36,11 @@ cdef class CANParser: def __init__(self, dbc_name, signals, checks=None, bus=0): if checks is None: checks = [] - self.can_valid = True self.dbc_name = dbc_name self.dbc = dbc_lookup(dbc_name) + if not self.dbc: + raise RuntimeError("Can't lookup" + dbc_name) self.vl = {} self.ts = {} @@ -148,7 +148,9 @@ cdef class CANDefine(): def __init__(self, dbc_name): self.dbc_name = dbc_name self.dbc = dbc_lookup(dbc_name) - + if not self.dbc: + raise RuntimeError("Can't lookup" + dbc_name) + num_vals = self.dbc[0].num_vals address_to_msg_name = {} diff --git a/can/tests/test_dbc_exceptions.py b/can/tests/test_dbc_exceptions.py new file mode 100644 index 0000000..9606011 --- /dev/null +++ b/can/tests/test_dbc_exceptions.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python3 + +import unittest + +from opendbc.can.parser import CANParser, CANDefine +from opendbc.can.packer import CANPacker + +class TestCanParserPackerExceptions(unittest.TestCase): + def test_civic_exceptions(self): + dbc_file = "honda_civic_touring_2016_can_generated" + dbc_invalid = dbc_file + "abcdef" + signals = [ + ("STEER_TORQUE", "STEERING_CONTROL", 0), + ("STEER_TORQUE_REQUEST", "STEERING_CONTROL", 0), + ] + checks = [] + with self.assertRaises(RuntimeError): + CANParser(dbc_invalid, signals, checks, 0) + with self.assertRaises(RuntimeError): + CANPacker(dbc_invalid) + with self.assertRaises(RuntimeError): + CANDefine(dbc_invalid) + + # Everything is supposed to work below + CANParser(dbc_file, signals, checks, 0) + CANPacker(dbc_file) + CANDefine(dbc_file) + + +if __name__ == "__main__": + unittest.main()