diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 1d811c72..cabcb944 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -7,7 +7,7 @@ repos: - id: check-merge-conflict - id: check-symlinks - repo: https://github.com/pre-commit/mirrors-mypy - rev: v0.910-1 + rev: v1.4.0 hooks: - id: mypy additional_dependencies: ['git+https://github.com/numpy/numpy-stubs', 'types-requests', 'types-atomicwrites', diff --git a/Dockerfile b/Dockerfile index c28d3f01..d1684abc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -55,8 +55,8 @@ ENV OPENPILOT_REF="e276d2a417a5133fb91c93b2ef30df68a7d5f225" ENV OPENDBC_REF="9ae9fbfe56f79dca66c673a6479751a15ad61780" COPY requirements.txt /tmp/ -RUN pyenv install 3.8.10 && \ - pyenv global 3.8.10 && \ +RUN pyenv install 3.11.4 && \ + pyenv global 3.11.4 && \ pyenv rehash && \ pip install --no-cache-dir -r /tmp/requirements.txt diff --git a/python/uds.py b/python/uds.py index 975d5e4c..bcba4985 100644 --- a/python/uds.py +++ b/python/uds.py @@ -302,7 +302,7 @@ def get_dtc_status_names(status): class CanClient(): def __init__(self, can_send: Callable[[int, bytes, int], None], can_recv: Callable[[], List[Tuple[int, int, bytes, int]]], - tx_addr: int, rx_addr: int, bus: int, sub_addr: int = None, debug: bool = False): + tx_addr: int, rx_addr: int, bus: int, sub_addr: Optional[int] = None, debug: bool = False): self.tx = can_send self.rx = can_recv self.tx_addr = tx_addr @@ -571,7 +571,7 @@ def get_rx_addr_for_tx_addr(tx_addr, rx_offset=0x8): class UdsClient(): - def __init__(self, panda, tx_addr: int, rx_addr: int = None, bus: int = 0, sub_addr: int = None, timeout: float = 1, + def __init__(self, panda, tx_addr: int, rx_addr: Optional[int] = None, bus: int = 0, sub_addr: Optional[int] = None, timeout: float = 1, debug: bool = False, tx_timeout: float = 1, response_pending_timeout: float = 10): self.bus = bus self.tx_addr = tx_addr @@ -584,7 +584,7 @@ class UdsClient(): self.response_pending_timeout = response_pending_timeout # generic uds request - def _uds_request(self, service_type: SERVICE_TYPE, subfunction: int = None, data: bytes = None) -> bytes: + def _uds_request(self, service_type: SERVICE_TYPE, subfunction: Optional[int] = None, data: Optional[bytes] = None) -> bytes: req = bytes([service_type]) if subfunction is not None: req += bytes([subfunction]) @@ -672,7 +672,7 @@ class UdsClient(): def tester_present(self, ): self._uds_request(SERVICE_TYPE.TESTER_PRESENT, subfunction=0x00) - def access_timing_parameter(self, timing_parameter_type: TIMING_PARAMETER_TYPE, parameter_values: bytes = None): + def access_timing_parameter(self, timing_parameter_type: TIMING_PARAMETER_TYPE, parameter_values: Optional[bytes] = None): write_custom_values = timing_parameter_type == TIMING_PARAMETER_TYPE.SET_TO_GIVEN_VALUES read_values = (timing_parameter_type == TIMING_PARAMETER_TYPE.READ_CURRENTLY_ACTIVE or timing_parameter_type == TIMING_PARAMETER_TYPE.READ_EXTENDED_SET) @@ -715,7 +715,7 @@ class UdsClient(): "data": resp[2:], # TODO: parse the reset of response } - def link_control(self, link_control_type: LINK_CONTROL_TYPE, baud_rate_type: BAUD_RATE_TYPE = None): + def link_control(self, link_control_type: LINK_CONTROL_TYPE, baud_rate_type: Optional[BAUD_RATE_TYPE] = None): data: Optional[bytes] if link_control_type == LINK_CONTROL_TYPE.VERIFY_BAUDRATE_TRANSITION_WITH_FIXED_BAUDRATE: diff --git a/tests/libpanda/libpanda_py.py b/tests/libpanda/libpanda_py.py index b95ceb9f..e8f063bf 100644 --- a/tests/libpanda/libpanda_py.py +++ b/tests/libpanda/libpanda_py.py @@ -1,6 +1,6 @@ import os from cffi import FFI -from typing import List +from typing import Any, List, Protocol from panda import LEN_TO_DLC from panda.tests.libpanda.safety_helpers import PandaSafety, setup_safety_helpers @@ -94,7 +94,14 @@ class CANPacket: addr: int data: List[int] -class Panda(PandaSafety): +class Panda(PandaSafety, Protocol): + # CAN + tx1_q: Any + tx2_q: Any + tx3_q: Any + txgmlan_q: Any + def can_set_checksum(self, p: CANPacket) -> None: ... + # safety def safety_rx_hook(self, to_send: CANPacket) -> int: ... def safety_tx_hook(self, to_push: CANPacket) -> int: ... diff --git a/tests/libpanda/safety_helpers.py b/tests/libpanda/safety_helpers.py index e44cc23d..23f642b2 100644 --- a/tests/libpanda/safety_helpers.py +++ b/tests/libpanda/safety_helpers.py @@ -1,4 +1,5 @@ # panda safety helpers, from safety_helpers.c +from typing import Protocol def setup_safety_helpers(ffi): ffi.cdef(""" @@ -49,7 +50,7 @@ def setup_safety_helpers(ffi): int get_honda_hw(void); """) -class PandaSafety: +class PandaSafety(Protocol): def set_controls_allowed(self, c: bool) -> None: ... def get_controls_allowed(self) -> bool: ... def get_longitudinal_allowed(self) -> bool: ... diff --git a/tests/usbprotocol/test_comms.py b/tests/usbprotocol/test_comms.py index 311b7a9e..9b020f23 100755 --- a/tests/usbprotocol/test_comms.py +++ b/tests/usbprotocol/test_comms.py @@ -156,4 +156,4 @@ class TestPandaComms(unittest.TestCase): if __name__ == "__main__": - unittest.main() \ No newline at end of file + unittest.main()