Source code for cantools.database.can.bus

# A CAN bus.

from typing import TYPE_CHECKING, Optional

from ...typechecking import Comments

if TYPE_CHECKING:
    from .formats.arxml.bus_specifics import AutosarBusSpecifics


[docs] class Bus: """A CAN bus. """ def __init__(self, name: str, comment: str | Comments | None = None, baudrate: int | None = None, fd_baudrate: int | None = None, autosar_specifics: Optional["AutosarBusSpecifics"] = None) -> None: self._name = name # If the 'comment' argument is a string, we assume that is an # English comment. This is slightly hacky, because the # function's behavior depends on the type of the passed # argument, but it is quite convenient... if isinstance(comment, str): # use the first comment in the dictionary as "The" comment self._comments: Comments | None = Comments({None: comment}) else: # assume that we have either no comment at all or a # multi-lingual dictionary self._comments = comment self._baudrate = baudrate self._fd_baudrate = fd_baudrate self._autosar = autosar_specifics @property def name(self) -> str: """The bus name as a string. """ return self._name @property def comment(self) -> str | None: """The bus' comment, or ``None`` if unavailable. Note that we implicitly try to return the English comment if multiple languages were specified. """ if self._comments is None: return None elif self._comments.get(None) is not None: return self._comments.get(None) elif self._comments.get("FOR-ALL") is not None: return self._comments.get("FOR-ALL") return self._comments.get('EN') @property def comments(self) -> Comments | None: """The dictionary with the descriptions of the bus in multiple languages. ``None`` if unavailable. """ return self._comments @property def baudrate(self) -> int | None: """The bus baudrate, or ``None`` if unavailable. """ return self._baudrate @property def fd_baudrate(self) -> int | None: """The baudrate used for the payload of CAN-FD frames, or ``None`` if unavailable. """ return self._fd_baudrate @property def autosar(self) -> Optional["AutosarBusSpecifics"]: """An object containing AUTOSAR specific properties of the bus. """ return self._autosar @autosar.setter def autosar(self, value: Optional["AutosarBusSpecifics"]) -> None: self._autosar = value def __repr__(self) -> str: return "bus('{}', {})".format( self._name, "'" + self.comment + "'" if self.comment is not None else None)