From ca0712f51c8eaef9f59249031828b03821b32e84 Mon Sep 17 00:00:00 2001 From: zariiii9003 <52598363+zariiii9003@users.noreply.github.com> Date: Thu, 30 Mar 2023 19:43:23 +0200 Subject: [PATCH 1/4] use ruff with isort, export symbols according to PEP484 --- .github/workflows/ci.yml | 3 + can/__init__.py | 78 +++++++++-------- can/bit_timing.py | 4 +- can/broadcastmanager.py | 2 +- can/bus.py | 15 ++-- can/ctypesutil.py | 1 - can/exceptions.py | 4 +- can/interface.py | 4 +- can/interfaces/__init__.py | 2 +- can/interfaces/canalystii.py | 12 +-- can/interfaces/cantact.py | 9 +- can/interfaces/etas/__init__.py | 4 +- can/interfaces/gs_usb.py | 10 +-- can/interfaces/ics_neovi/__init__.py | 8 +- can/interfaces/ics_neovi/neovi_bus.py | 9 +- can/interfaces/iscan.py | 7 +- can/interfaces/ixxat/__init__.py | 8 +- can/interfaces/ixxat/canlib.py | 5 +- can/interfaces/ixxat/canlib_vcinpl.py | 9 +- can/interfaces/ixxat/canlib_vcinpl2.py | 10 +-- can/interfaces/kvaser/canlib.py | 10 +-- can/interfaces/neousys/__init__.py | 2 +- can/interfaces/neousys/neousys.py | 15 ++-- can/interfaces/nican.py | 8 +- can/interfaces/nixnet.py | 6 +- can/interfaces/pcan/__init__.py | 3 +- can/interfaces/pcan/basic.py | 5 +- can/interfaces/pcan/pcan.py | 86 +++++++++---------- can/interfaces/robotell.py | 3 +- can/interfaces/seeedstudio/__init__.py | 2 +- can/interfaces/seeedstudio/seeedstudio.py | 2 +- can/interfaces/serial/__init__.py | 2 +- can/interfaces/serial/serial_can.py | 7 +- can/interfaces/slcan.py | 12 ++- can/interfaces/socketcan/__init__.py | 4 +- can/interfaces/socketcan/socketcan.py | 17 ++-- can/interfaces/socketcan/utils.py | 2 +- can/interfaces/socketcand/__init__.py | 2 +- can/interfaces/socketcand/socketcand.py | 7 +- can/interfaces/systec/__init__.py | 2 +- can/interfaces/systec/constants.py | 4 +- can/interfaces/systec/exceptions.py | 4 +- can/interfaces/systec/structures.py | 16 +++- can/interfaces/systec/ucan.py | 4 +- can/interfaces/systec/ucanbus.py | 4 +- can/interfaces/udp_multicast/__init__.py | 2 +- can/interfaces/udp_multicast/bus.py | 3 +- can/interfaces/udp_multicast/utils.py | 7 +- can/interfaces/usb2can/__init__.py | 4 +- can/interfaces/usb2can/usb2canInterface.py | 11 ++- .../usb2can/usb2canabstractionlayer.py | 3 +- can/interfaces/vector/__init__.py | 18 ++-- can/interfaces/vector/canlib.py | 30 +++---- can/interfaces/vector/xldefine.py | 1 - can/interfaces/vector/xldriver.py | 3 +- can/interfaces/virtual.py | 9 +- can/io/__init__.py | 30 +++++-- can/io/asc.py | 12 ++- can/io/blf.py | 11 ++- can/io/canutils.py | 5 +- can/io/csv.py | 7 +- can/io/generic.py | 38 ++++---- can/io/logger.py | 15 ++-- can/io/player.py | 6 +- can/io/printer.py | 5 +- can/io/sqlite.py | 9 +- can/io/trc.py | 13 ++- can/listener.py | 6 +- can/logconvert.py | 4 +- can/logger.py | 7 +- can/message.py | 5 +- can/notifier.py | 2 +- can/player.py | 6 +- can/thread_safe_bus.py | 1 - can/util.py | 12 +-- can/viewer.py | 9 +- doc/conf.py | 4 +- pyproject.toml | 13 +++ requirements-lint.txt | 1 + setup.py | 7 +- test/back2back_test.py | 10 +-- test/contextmanager_test.py | 1 + test/listener_test.py | 8 +- test/logformats_test.py | 17 ++-- test/network_test.py | 6 +- test/notifier_test.py | 4 +- test/serial_test.py | 3 +- test/simplecyclic_test.py | 4 +- test/test_cyclic_socketcan.py | 2 +- test/test_interface_canalystii.py | 6 +- test/test_interface_ixxat.py | 1 + test/test_interface_ixxat_fd.py | 1 + test/test_kvaser.py | 3 +- test/test_logger.py | 6 +- test/test_message_class.py | 13 ++- test/test_message_filtering.py | 1 - test/test_message_sync.py | 13 ++- test/test_neousys.py | 12 +-- test/test_neovi.py | 1 + test/test_player.py | 7 +- test/test_robotell.py | 1 + test/test_rotating_loggers.py | 1 + test/test_scripts.py | 4 +- test/test_slcan.py | 3 +- test/test_socketcan.py | 7 +- test/test_socketcan_helpers.py | 6 +- test/test_util.py | 4 +- test/test_vector.py | 14 +-- test/test_viewer.py | 3 +- test/zero_dlc_test.py | 3 +- 110 files changed, 481 insertions(+), 436 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4f96578e5..465d5959b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -95,6 +95,9 @@ jobs: - name: mypy 3.11 run: | mypy --python-version 3.11 . + - name: ruff + run: | + ruff check can - name: pylint run: | pylint --rcfile=.pylintrc \ diff --git a/can/__init__.py b/can/__init__.py index d9ff5ffcd..3d65c1979 100644 --- a/can/__init__.py +++ b/can/__init__.py @@ -6,7 +6,7 @@ """ import logging -from typing import Dict, Any +from typing import Any, Dict __version__ = "4.1.0" @@ -14,39 +14,47 @@ rc: Dict[str, Any] = {} -from .listener import Listener, BufferedReader, RedirectReader, AsyncBufferedReader - +from . import typechecking as typechecking # isort:skip +from . import util as util # isort:skip +from . import broadcastmanager as broadcastmanager +from . import interface as interface +from .bit_timing import BitTiming as BitTiming +from .bit_timing import BitTimingFd as BitTimingFd +from .bus import BusABC as BusABC +from .bus import BusState as BusState +from .exceptions import CanError as CanError +from .exceptions import CanInitializationError as CanInitializationError from .exceptions import ( - CanError, - CanInterfaceNotImplementedError, - CanInitializationError, - CanOperationError, - CanTimeoutError, -) - -from .util import set_logging_level - -from .message import Message -from .bus import BusABC, BusState -from .thread_safe_bus import ThreadSafeBus -from .notifier import Notifier -from .interfaces import VALID_INTERFACES -from . import interface -from .interface import Bus, detect_available_configs -from .bit_timing import BitTiming, BitTimingFd - -from .io import Logger, SizedRotatingLogger, Printer, LogReader, MessageSync -from .io import ASCWriter, ASCReader -from .io import BLFReader, BLFWriter -from .io import CanutilsLogReader, CanutilsLogWriter -from .io import CSVWriter, CSVReader -from .io import SqliteWriter, SqliteReader -from .io import TRCReader, TRCWriter, TRCFileVersion - -from .broadcastmanager import ( - CyclicSendTaskABC, - LimitedDurationCyclicSendTaskABC, - ModifiableCyclicTaskABC, - MultiRateCyclicSendTaskABC, - RestartableCyclicTaskABC, + CanInterfaceNotImplementedError as CanInterfaceNotImplementedError, ) +from .exceptions import CanOperationError as CanOperationError +from .exceptions import CanTimeoutError as CanTimeoutError +from .interface import Bus as Bus +from .interface import detect_available_configs as detect_available_configs +from .interfaces import VALID_INTERFACES as VALID_INTERFACES +from .io import ASCReader as ASCReader +from .io import ASCWriter as ASCWriter +from .io import BLFReader as BLFReader +from .io import BLFWriter as BLFWriter +from .io import CanutilsLogReader as CanutilsLogReader +from .io import CanutilsLogWriter as CanutilsLogWriter +from .io import CSVReader as CSVReader +from .io import CSVWriter as CSVWriter +from .io import Logger as Logger +from .io import LogReader as LogReader +from .io import MessageSync as MessageSync +from .io import Printer as Printer +from .io import SizedRotatingLogger as SizedRotatingLogger +from .io import SqliteReader as SqliteReader +from .io import SqliteWriter as SqliteWriter +from .io import TRCFileVersion as TRCFileVersion +from .io import TRCReader as TRCReader +from .io import TRCWriter as TRCWriter +from .listener import AsyncBufferedReader as AsyncBufferedReader +from .listener import BufferedReader as BufferedReader +from .listener import Listener as Listener +from .listener import RedirectReader as RedirectReader +from .message import Message as Message +from .notifier import Notifier as Notifier +from .thread_safe_bus import ThreadSafeBus as ThreadSafeBus +from .util import set_logging_level as set_logging_level diff --git a/can/bit_timing.py b/can/bit_timing.py index 4fada145b..bf76c08af 100644 --- a/can/bit_timing.py +++ b/can/bit_timing.py @@ -1,8 +1,8 @@ # pylint: disable=too-many-lines import math -from typing import List, Mapping, Iterator, cast +from typing import Iterator, List, Mapping, cast -from can.typechecking import BitTimingFdDict, BitTimingDict +from can.typechecking import BitTimingDict, BitTimingFdDict class BitTiming(Mapping): diff --git a/can/broadcastmanager.py b/can/broadcastmanager.py index d795eb1fa..07d93e296 100644 --- a/can/broadcastmanager.py +++ b/can/broadcastmanager.py @@ -10,7 +10,7 @@ import sys import threading import time -from typing import Optional, Sequence, Tuple, Union, Callable, TYPE_CHECKING +from typing import TYPE_CHECKING, Callable, Optional, Sequence, Tuple, Union from typing_extensions import Final diff --git a/can/bus.py b/can/bus.py index 32a26ebcb..3964215d3 100644 --- a/can/bus.py +++ b/can/bus.py @@ -1,19 +1,18 @@ """ Contains the ABC bus implementation and its documentation. """ -import contextlib -from typing import cast, Any, Iterator, List, Optional, Sequence, Tuple, Union - -import can.typechecking -from abc import ABC, ABCMeta, abstractmethod -import can +import contextlib import logging import threading -from time import time +from abc import ABC, ABCMeta, abstractmethod from enum import Enum, auto +from time import time +from typing import Any, Iterator, List, Optional, Sequence, Tuple, Union, cast -from can.broadcastmanager import ThreadBasedCyclicSendTask, CyclicSendTaskABC +import can +import can.typechecking +from can.broadcastmanager import CyclicSendTaskABC, ThreadBasedCyclicSendTask from can.message import Message LOG = logging.getLogger(__name__) diff --git a/can/ctypesutil.py b/can/ctypesutil.py index 4cfebb5b8..e624db6d2 100644 --- a/can/ctypesutil.py +++ b/can/ctypesutil.py @@ -5,7 +5,6 @@ import ctypes import logging import sys - from typing import Any, Callable, Optional, Tuple, Union log = logging.getLogger("can.ctypesutil") diff --git a/can/exceptions.py b/can/exceptions.py index 57130082a..e1c970e27 100644 --- a/can/exceptions.py +++ b/can/exceptions.py @@ -17,9 +17,7 @@ import sys from contextlib import contextmanager - -from typing import Optional -from typing import Type +from typing import Optional, Type if sys.version_info >= (3, 9): from collections.abc import Generator diff --git a/can/interface.py b/can/interface.py index 47b44fed1..4c59dab8b 100644 --- a/can/interface.py +++ b/can/interface.py @@ -6,12 +6,12 @@ import importlib import logging -from typing import Any, cast, Iterable, Type, Optional, Union, List +from typing import Any, Iterable, List, Optional, Type, Union, cast from . import util from .bus import BusABC -from .interfaces import BACKENDS from .exceptions import CanInterfaceNotImplementedError +from .interfaces import BACKENDS from .typechecking import AutoDetectedConfig, Channel log = logging.getLogger("can.interface") diff --git a/can/interfaces/__init__.py b/can/interfaces/__init__.py index c9ca6ca55..5089dbf47 100644 --- a/can/interfaces/__init__.py +++ b/can/interfaces/__init__.py @@ -3,7 +3,7 @@ """ import sys -from typing import cast, Dict, Tuple +from typing import Dict, Tuple, cast # interface_name => (module, classname) BACKENDS: Dict[str, Tuple[str, str]] = { diff --git a/can/interfaces/canalystii.py b/can/interfaces/canalystii.py index 1e6a7fea4..35feef35c 100644 --- a/can/interfaces/canalystii.py +++ b/can/interfaces/canalystii.py @@ -1,15 +1,15 @@ from collections import deque -from ctypes import c_ubyte import logging import time -from typing import Any, Dict, Optional, Deque, Sequence, Tuple, Union +from ctypes import c_ubyte +from typing import Any, Deque, Dict, Optional, Sequence, Tuple, Union + +import canalystii as driver -from can import BitTiming, BusABC, Message, BitTimingFd +from can import BitTiming, BitTimingFd, BusABC, Message from can.exceptions import CanTimeoutError from can.typechecking import CanFilters -from can.util import deprecated_args_alias, check_or_adjust_timing_clock - -import canalystii as driver +from can.util import check_or_adjust_timing_clock, deprecated_args_alias logger = logging.getLogger(__name__) diff --git a/can/interfaces/cantact.py b/can/interfaces/cantact.py index 20e4d0cb7..75e1adbaa 100644 --- a/can/interfaces/cantact.py +++ b/can/interfaces/cantact.py @@ -2,18 +2,19 @@ Interface for CANtact devices from Linklayer Labs """ -import time import logging -from typing import Optional, Union, Any +import time +from typing import Any, Optional, Union from unittest.mock import Mock -from can import BusABC, Message, BitTiming, BitTimingFd +from can import BitTiming, BitTimingFd, BusABC, Message + from ..exceptions import ( CanInitializationError, CanInterfaceNotImplementedError, error_check, ) -from ..util import deprecated_args_alias, check_or_adjust_timing_clock +from ..util import check_or_adjust_timing_clock, deprecated_args_alias logger = logging.getLogger(__name__) diff --git a/can/interfaces/etas/__init__.py b/can/interfaces/etas/__init__.py index 03dc42bc1..5f768b3e5 100644 --- a/can/interfaces/etas/__init__.py +++ b/can/interfaces/etas/__init__.py @@ -3,7 +3,8 @@ from typing import Dict, List, Optional, Tuple import can -from ...exceptions import CanInitializationError +from can.exceptions import CanInitializationError + from .boa import * @@ -290,6 +291,7 @@ def state(self, new_state: can.BusState) -> None: # raise CanOperationError(f"OCI_AdaptCANConfiguration failed with error 0x{ec:X}") raise NotImplementedError("Setting state is not implemented.") + @staticmethod def _detect_available_configs() -> List[can.typechecking.AutoDetectedConfig]: nodeRange = CSI_NodeRange(CSI_NODE_MIN, CSI_NODE_MAX) tree = ctypes.POINTER(CSI_Tree)() diff --git a/can/interfaces/gs_usb.py b/can/interfaces/gs_usb.py index 185d28acf..fb5ce1d80 100644 --- a/can/interfaces/gs_usb.py +++ b/can/interfaces/gs_usb.py @@ -1,15 +1,15 @@ +import logging from typing import Optional, Tuple +import usb +from gs_usb.constants import CAN_EFF_FLAG, CAN_ERR_FLAG, CAN_MAX_DLC, CAN_RTR_FLAG from gs_usb.gs_usb import GsUsb -from gs_usb.gs_usb_frame import GsUsbFrame, GS_USB_NONE_ECHO_ID -from gs_usb.constants import CAN_ERR_FLAG, CAN_RTR_FLAG, CAN_EFF_FLAG, CAN_MAX_DLC +from gs_usb.gs_usb_frame import GS_USB_NONE_ECHO_ID, GsUsbFrame + import can -import usb -import logging from ..exceptions import CanInitializationError, CanOperationError - logger = logging.getLogger(__name__) diff --git a/can/interfaces/ics_neovi/__init__.py b/can/interfaces/ics_neovi/__init__.py index 548e3ea3f..652715366 100644 --- a/can/interfaces/ics_neovi/__init__.py +++ b/can/interfaces/ics_neovi/__init__.py @@ -1,7 +1,7 @@ """ """ -from .neovi_bus import NeoViBus -from .neovi_bus import ICSApiError -from .neovi_bus import ICSInitializationError -from .neovi_bus import ICSOperationError +from .neovi_bus import ICSApiError as ICSApiError +from .neovi_bus import ICSInitializationError as ICSInitializationError +from .neovi_bus import ICSOperationError as ICSOperationError +from .neovi_bus import NeoViBus as NeoViBus diff --git a/can/interfaces/ics_neovi/neovi_bus.py b/can/interfaces/ics_neovi/neovi_bus.py index c3abc9f67..848cefcc8 100644 --- a/can/interfaces/ics_neovi/neovi_bus.py +++ b/can/interfaces/ics_neovi/neovi_bus.py @@ -11,17 +11,18 @@ import logging import os import tempfile -from collections import deque, defaultdict, Counter +from collections import Counter, defaultdict, deque from itertools import cycle from threading import Event from warnings import warn -from can import Message, BusABC +from can import BusABC, Message + from ...exceptions import ( CanError, - CanTimeoutError, - CanOperationError, CanInitializationError, + CanOperationError, + CanTimeoutError, ) logger = logging.getLogger(__name__) diff --git a/can/interfaces/iscan.py b/can/interfaces/iscan.py index a27494b61..ef3a48215 100644 --- a/can/interfaces/iscan.py +++ b/can/interfaces/iscan.py @@ -3,16 +3,17 @@ """ import ctypes -import time import logging +import time from typing import Optional, Tuple, Union -from can import BusABC, Message from can import ( + BusABC, CanError, - CanInterfaceNotImplementedError, CanInitializationError, + CanInterfaceNotImplementedError, CanOperationError, + Message, ) logger = logging.getLogger(__name__) diff --git a/can/interfaces/ixxat/__init__.py b/can/interfaces/ixxat/__init__.py index 1419d97a1..6d49cddbb 100644 --- a/can/interfaces/ixxat/__init__.py +++ b/can/interfaces/ixxat/__init__.py @@ -4,7 +4,9 @@ Copyright (C) 2016-2021 Giuseppe Corbelli """ -from can.interfaces.ixxat.canlib import IXXATBus +from can.interfaces.ixxat.canlib import IXXATBus as IXXATBus + +# import this and not the one from vcinpl2 for backward compatibility from can.interfaces.ixxat.canlib_vcinpl import ( - get_ixxat_hwids, -) # import this and not the one from vcinpl2 for backward compatibility + get_ixxat_hwids as get_ixxat_hwids, +) diff --git a/can/interfaces/ixxat/canlib.py b/can/interfaces/ixxat/canlib.py index 01f754115..3db719f96 100644 --- a/can/interfaces/ixxat/canlib.py +++ b/can/interfaces/ixxat/canlib.py @@ -1,11 +1,10 @@ +from typing import Optional + import can.interfaces.ixxat.canlib_vcinpl as vcinpl import can.interfaces.ixxat.canlib_vcinpl2 as vcinpl2 - from can import BusABC, Message from can.bus import BusState -from typing import Optional - class IXXATBus(BusABC): """The CAN Bus implemented for the IXXAT interface. diff --git a/can/interfaces/ixxat/canlib_vcinpl.py b/can/interfaces/ixxat/canlib_vcinpl.py index 8304a6dd7..550484f3e 100644 --- a/can/interfaces/ixxat/canlib_vcinpl.py +++ b/can/interfaces/ixxat/canlib_vcinpl.py @@ -13,16 +13,17 @@ import functools import logging import sys -from typing import Optional, Callable, Tuple +from typing import Callable, Optional, Tuple from can import BusABC, Message -from can.bus import BusState -from can.exceptions import CanInterfaceNotImplementedError, CanInitializationError from can.broadcastmanager import ( LimitedDurationCyclicSendTaskABC, RestartableCyclicTaskABC, ) -from can.ctypesutil import CLibrary, HANDLE, PHANDLE, HRESULT as ctypes_HRESULT +from can.bus import BusState +from can.ctypesutil import HANDLE, PHANDLE, CLibrary +from can.ctypesutil import HRESULT as ctypes_HRESULT +from can.exceptions import CanInitializationError, CanInterfaceNotImplementedError from can.util import deprecated_args_alias from . import constants, structures diff --git a/can/interfaces/ixxat/canlib_vcinpl2.py b/can/interfaces/ixxat/canlib_vcinpl2.py index b8ed916dc..3e7f2ff91 100644 --- a/can/interfaces/ixxat/canlib_vcinpl2.py +++ b/can/interfaces/ixxat/canlib_vcinpl2.py @@ -13,17 +13,17 @@ import functools import logging import sys -from typing import Optional, Callable, Tuple +from typing import Callable, Optional, Tuple +import can.util from can import BusABC, Message -from can.exceptions import CanInterfaceNotImplementedError, CanInitializationError from can.broadcastmanager import ( LimitedDurationCyclicSendTaskABC, RestartableCyclicTaskABC, ) -from can.ctypesutil import CLibrary, HANDLE, PHANDLE, HRESULT as ctypes_HRESULT - -import can.util +from can.ctypesutil import HANDLE, PHANDLE, CLibrary +from can.ctypesutil import HRESULT as ctypes_HRESULT +from can.exceptions import CanInitializationError, CanInterfaceNotImplementedError from can.util import deprecated_args_alias from . import constants, structures diff --git a/can/interfaces/kvaser/canlib.py b/can/interfaces/kvaser/canlib.py index 2bbf8f0bf..f6b92ccef 100644 --- a/can/interfaces/kvaser/canlib.py +++ b/can/interfaces/kvaser/canlib.py @@ -6,15 +6,15 @@ Copyright (C) 2010 Dynamic Controls """ +import ctypes +import logging import sys import time -import logging -import ctypes -from can import BusABC -from ...exceptions import CanError, CanInitializationError, CanOperationError -from can import Message +from can import BusABC, Message from can.util import time_perfcounter_correlation + +from ...exceptions import CanError, CanInitializationError, CanOperationError from . import constants as canstat from . import structures diff --git a/can/interfaces/neousys/__init__.py b/can/interfaces/neousys/__init__.py index 3aa87332c..330e78b9d 100644 --- a/can/interfaces/neousys/__init__.py +++ b/can/interfaces/neousys/__init__.py @@ -1,3 +1,3 @@ """ Neousys CAN bus driver """ -from can.interfaces.neousys.neousys import NeousysBus +from can.interfaces.neousys.neousys import NeousysBus as NeousysBus diff --git a/can/interfaces/neousys/neousys.py b/can/interfaces/neousys/neousys.py index 57f947aa4..d57234ddd 100644 --- a/can/interfaces/neousys/neousys.py +++ b/can/interfaces/neousys/neousys.py @@ -14,21 +14,20 @@ # pylint: disable=too-many-instance-attributes # pylint: disable=wrong-import-position -import queue import logging import platform -from time import time - +import queue from ctypes import ( - byref, CFUNCTYPE, + POINTER, + Structure, + byref, c_ubyte, c_uint, c_ushort, - POINTER, sizeof, - Structure, ) +from time import time try: from ctypes import WinDLL @@ -36,13 +35,13 @@ from ctypes import CDLL from can import BusABC, Message + from ...exceptions import ( CanInitializationError, - CanOperationError, CanInterfaceNotImplementedError, + CanOperationError, ) - logger = logging.getLogger(__name__) diff --git a/can/interfaces/nican.py b/can/interfaces/nican.py index ea13e28e8..8457a1a38 100644 --- a/can/interfaces/nican.py +++ b/can/interfaces/nican.py @@ -16,17 +16,17 @@ import ctypes import logging import sys +from typing import Optional, Tuple, Type -from can import BusABC, Message import can.typechecking +from can import BusABC, Message + from ..exceptions import ( CanError, + CanInitializationError, CanInterfaceNotImplementedError, CanOperationError, - CanInitializationError, ) -from typing import Optional, Tuple, Type - logger = logging.getLogger(__name__) diff --git a/can/interfaces/nixnet.py b/can/interfaces/nixnet.py index 6c3e63697..4ddb52455 100644 --- a/can/interfaces/nixnet.py +++ b/can/interfaces/nixnet.py @@ -13,14 +13,14 @@ import time from queue import SimpleQueue from types import ModuleType -from typing import Optional, List, Union, Tuple, Any +from typing import Any, List, Optional, Tuple, Union import can.typechecking -from can import BusABC, Message, BitTiming, BitTimingFd +from can import BitTiming, BitTimingFd, BusABC, Message from can.exceptions import ( CanInitializationError, - CanOperationError, CanInterfaceNotImplementedError, + CanOperationError, ) from can.util import check_or_adjust_timing_clock, deprecated_args_alias diff --git a/can/interfaces/pcan/__init__.py b/can/interfaces/pcan/__init__.py index 0f28b0ffe..40969b38b 100644 --- a/can/interfaces/pcan/__init__.py +++ b/can/interfaces/pcan/__init__.py @@ -1,4 +1,5 @@ """ """ -from can.interfaces.pcan.pcan import PcanBus, PcanError +from can.interfaces.pcan.pcan import PcanBus as PcanBus +from can.interfaces.pcan.pcan import PcanError as PcanError diff --git a/can/interfaces/pcan/basic.py b/can/interfaces/pcan/basic.py index d1b2121cb..a60b96079 100644 --- a/can/interfaces/pcan/basic.py +++ b/can/interfaces/pcan/basic.py @@ -15,11 +15,10 @@ # more Info at http://www.peak-system.com # Module Imports +import logging +import platform from ctypes import * from ctypes.util import find_library -import platform - -import logging PLATFORM = platform.system() IS_WINDOWS = PLATFORM == "Windows" diff --git a/can/interfaces/pcan/pcan.py b/can/interfaces/pcan/pcan.py index 2ed0ff445..61d19d1b4 100644 --- a/can/interfaces/pcan/pcan.py +++ b/can/interfaces/pcan/pcan.py @@ -2,74 +2,74 @@ Enable basic CAN over a PCAN USB device. """ import logging +import platform import time from datetime import datetime -import platform -from typing import Optional, List, Tuple, Union, Any +from typing import Any, List, Optional, Tuple, Union from packaging import version from can import ( - BusABC, - BusState, BitTiming, BitTimingFd, - Message, + BusABC, + BusState, CanError, - CanOperationError, CanInitializationError, + CanOperationError, + Message, ) from can.util import check_or_adjust_timing_clock, dlc2len, len2dlc + from .basic import ( - PCAN_BITRATES, - PCAN_FD_PARAMETER_LIST, - PCAN_CHANNEL_NAMES, - PCAN_NONEBUS, - PCAN_BAUD_500K, - PCAN_TYPE_ISA, - PCANBasic, - PCAN_ERROR_OK, + FEATURE_FD_CAPABLE, + IS_LINUX, + IS_WINDOWS, PCAN_ALLOW_ERROR_FRAMES, - PCAN_PARAMETER_ON, - PCAN_RECEIVE_EVENT, PCAN_API_VERSION, + PCAN_ATTACHED_CHANNELS, + PCAN_BAUD_500K, + PCAN_BITRATES, + PCAN_BUSOFF_AUTORESET, + PCAN_CHANNEL_AVAILABLE, + PCAN_CHANNEL_CONDITION, + PCAN_CHANNEL_FEATURES, + PCAN_CHANNEL_IDENTIFYING, + PCAN_CHANNEL_NAMES, PCAN_DEVICE_NUMBER, - PCAN_ERROR_QRCVEMPTY, - PCAN_ERROR_BUSLIGHT, + PCAN_DICT_STATUS, PCAN_ERROR_BUSHEAVY, - PCAN_MESSAGE_EXTENDED, - PCAN_MESSAGE_RTR, - PCAN_MESSAGE_FD, + PCAN_ERROR_BUSLIGHT, + PCAN_ERROR_OK, + PCAN_ERROR_QRCVEMPTY, + PCAN_FD_PARAMETER_LIST, + PCAN_LANBUS1, + PCAN_LISTEN_ONLY, PCAN_MESSAGE_BRS, - PCAN_MESSAGE_ESI, PCAN_MESSAGE_ERRFRAME, + PCAN_MESSAGE_ESI, + PCAN_MESSAGE_EXTENDED, + PCAN_MESSAGE_FD, + PCAN_MESSAGE_RTR, PCAN_MESSAGE_STANDARD, - TPCANMsgFD, - TPCANMsg, - PCAN_CHANNEL_IDENTIFYING, - PCAN_LISTEN_ONLY, + PCAN_NONEBUS, PCAN_PARAMETER_OFF, - TPCANHandle, - IS_LINUX, - IS_WINDOWS, + PCAN_PARAMETER_ON, + PCAN_PCCBUS1, PCAN_PCIBUS1, + PCAN_RECEIVE_EVENT, + PCAN_TYPE_ISA, PCAN_USBBUS1, - PCAN_PCCBUS1, - PCAN_LANBUS1, - PCAN_CHANNEL_CONDITION, - PCAN_CHANNEL_AVAILABLE, - PCAN_CHANNEL_FEATURES, - FEATURE_FD_CAPABLE, - PCAN_DICT_STATUS, - PCAN_BUSOFF_AUTORESET, + VALID_PCAN_CAN_CLOCKS, + VALID_PCAN_FD_CLOCKS, + PCANBasic, TPCANBaudrate, - PCAN_ATTACHED_CHANNELS, TPCANChannelInformation, - VALID_PCAN_FD_CLOCKS, - VALID_PCAN_CAN_CLOCKS, + TPCANHandle, + TPCANMsg, + TPCANMsgFD, ) - # Set up logging log = logging.getLogger("can.pcan") @@ -96,7 +96,7 @@ try: # Try builtin Python 3 Windows API from _overlapped import CreateEvent - from _winapi import WaitForSingleObject, WAIT_OBJECT_0, INFINITE + from _winapi import INFINITE, WAIT_OBJECT_0, WaitForSingleObject HAS_EVENTS = True except ImportError: @@ -104,8 +104,6 @@ elif IS_LINUX: try: - import errno - import os import select HAS_EVENTS = True diff --git a/can/interfaces/robotell.py b/can/interfaces/robotell.py index 4d82c1922..4d038a38a 100644 --- a/can/interfaces/robotell.py +++ b/can/interfaces/robotell.py @@ -3,11 +3,12 @@ """ import io -import time import logging +import time from typing import Optional from can import BusABC, Message + from ..exceptions import CanInterfaceNotImplementedError, CanOperationError logger = logging.getLogger(__name__) diff --git a/can/interfaces/seeedstudio/__init__.py b/can/interfaces/seeedstudio/__init__.py index cb1c17f1d..c2dddee84 100644 --- a/can/interfaces/seeedstudio/__init__.py +++ b/can/interfaces/seeedstudio/__init__.py @@ -1,4 +1,4 @@ """ """ -from can.interfaces.seeedstudio.seeedstudio import SeeedBus +from can.interfaces.seeedstudio.seeedstudio import SeeedBus as SeeedBus diff --git a/can/interfaces/seeedstudio/seeedstudio.py b/can/interfaces/seeedstudio/seeedstudio.py index 4d09ca0cd..7d7a1e687 100644 --- a/can/interfaces/seeedstudio/seeedstudio.py +++ b/can/interfaces/seeedstudio/seeedstudio.py @@ -6,9 +6,9 @@ SKU 114991193 """ +import io import logging import struct -import io from time import time import can diff --git a/can/interfaces/serial/__init__.py b/can/interfaces/serial/__init__.py index bd6a45b9c..a6d527e24 100644 --- a/can/interfaces/serial/__init__.py +++ b/can/interfaces/serial/__init__.py @@ -1,4 +1,4 @@ """ """ -from can.interfaces.serial.serial_can import SerialBus as Bus +from can.interfaces.serial.serial_can import SerialBus as SerialBus diff --git a/can/interfaces/serial/serial_can.py b/can/interfaces/serial/serial_can.py index d0df88fcd..eb336feba 100644 --- a/can/interfaces/serial/serial_can.py +++ b/can/interfaces/serial/serial_can.py @@ -10,14 +10,15 @@ import io import logging import struct -from typing import Any, List, Tuple, Optional +from typing import Any, List, Optional, Tuple -from can import BusABC, Message from can import ( - CanInterfaceNotImplementedError, + BusABC, CanInitializationError, + CanInterfaceNotImplementedError, CanOperationError, CanTimeoutError, + Message, ) from can.typechecking import AutoDetectedConfig diff --git a/can/interfaces/slcan.py b/can/interfaces/slcan.py index eed67a5f8..21306f28f 100644 --- a/can/interfaces/slcan.py +++ b/can/interfaces/slcan.py @@ -2,21 +2,19 @@ Interface for slcan compatible interfaces (win32/linux). """ -from typing import Any, Optional, Tuple - import io -import time import logging +import time +from typing import Any, Optional, Tuple + +from can import BusABC, Message, typechecking -from can import BusABC, Message from ..exceptions import ( - CanInterfaceNotImplementedError, CanInitializationError, + CanInterfaceNotImplementedError, CanOperationError, error_check, ) -from can import typechecking - logger = logging.getLogger(__name__) diff --git a/can/interfaces/socketcan/__init__.py b/can/interfaces/socketcan/__init__.py index e08c18f50..291535aaa 100644 --- a/can/interfaces/socketcan/__init__.py +++ b/can/interfaces/socketcan/__init__.py @@ -2,4 +2,6 @@ See: https://www.kernel.org/doc/Documentation/networking/can.txt """ -from .socketcan import SocketcanBus, CyclicSendTask, MultiRateCyclicSendTask +from .socketcan import CyclicSendTask as CyclicSendTask +from .socketcan import MultiRateCyclicSendTask as MultiRateCyclicSendTask +from .socketcan import SocketcanBus as SocketcanBus diff --git a/can/interfaces/socketcan/socketcan.py b/can/interfaces/socketcan/socketcan.py index 74fbe8197..bdf39f0ab 100644 --- a/can/interfaces/socketcan/socketcan.py +++ b/can/interfaces/socketcan/socketcan.py @@ -5,17 +5,16 @@ At the end of the file the usage of the internal methods is shown. """ -from typing import Dict, List, Optional, Sequence, Tuple, Type, Union - -import logging import ctypes import ctypes.util +import errno +import logging import select import socket import struct -import time import threading -import errno +import time +from typing import Dict, List, Optional, Sequence, Tuple, Type, Union log = logging.getLogger(__name__) log_tx = log.getChild("tx") @@ -31,15 +30,15 @@ import can -from can import Message, BusABC +from can import BusABC, Message from can.broadcastmanager import ( + LimitedDurationCyclicSendTaskABC, ModifiableCyclicTaskABC, RestartableCyclicTaskABC, - LimitedDurationCyclicSendTaskABC, ) -from can.typechecking import CanFilters from can.interfaces.socketcan import constants -from can.interfaces.socketcan.utils import pack_filters, find_available_interfaces +from can.interfaces.socketcan.utils import find_available_interfaces, pack_filters +from can.typechecking import CanFilters # Setup BCM struct diff --git a/can/interfaces/socketcan/utils.py b/can/interfaces/socketcan/utils.py index 7a8538135..8b2114692 100644 --- a/can/interfaces/socketcan/utils.py +++ b/can/interfaces/socketcan/utils.py @@ -8,7 +8,7 @@ import os import struct import subprocess -from typing import cast, Optional, List +from typing import List, Optional, cast from can import typechecking from can.interfaces.socketcan.constants import CAN_EFF_FLAG diff --git a/can/interfaces/socketcand/__init__.py b/can/interfaces/socketcand/__init__.py index 442c06d8b..e03a5d6d3 100644 --- a/can/interfaces/socketcand/__init__.py +++ b/can/interfaces/socketcand/__init__.py @@ -6,4 +6,4 @@ http://www.domologic.de """ -from .socketcand import SocketCanDaemonBus +from .socketcand import SocketCanDaemonBus as SocketCanDaemonBus diff --git a/can/interfaces/socketcand/socketcand.py b/can/interfaces/socketcand/socketcand.py index 3f4e2ac86..0c6c06ccf 100644 --- a/can/interfaces/socketcand/socketcand.py +++ b/can/interfaces/socketcand/socketcand.py @@ -7,14 +7,15 @@ Copyright (C) 2021 DOMOLOGIC GmbH http://www.domologic.de """ -import can -import socket -import select import logging +import select +import socket import time import traceback from collections import deque +import can + log = logging.getLogger(__name__) diff --git a/can/interfaces/systec/__init__.py b/can/interfaces/systec/__init__.py index be7004b6a..b972db910 100644 --- a/can/interfaces/systec/__init__.py +++ b/can/interfaces/systec/__init__.py @@ -1 +1 @@ -from can.interfaces.systec.ucanbus import UcanBus +from can.interfaces.systec.ucanbus import UcanBus as UcanBus diff --git a/can/interfaces/systec/constants.py b/can/interfaces/systec/constants.py index 96952c17e..8caf9eab4 100644 --- a/can/interfaces/systec/constants.py +++ b/can/interfaces/systec/constants.py @@ -1,4 +1,6 @@ -from ctypes import c_ubyte as BYTE, c_ushort as WORD, c_ulong as DWORD +from ctypes import c_ubyte as BYTE +from ctypes import c_ulong as DWORD +from ctypes import c_ushort as WORD #: Maximum number of modules that are supported. MAX_MODULES = 64 diff --git a/can/interfaces/systec/exceptions.py b/can/interfaces/systec/exceptions.py index 733326194..9f7d4e2e5 100644 --- a/can/interfaces/systec/exceptions.py +++ b/can/interfaces/systec/exceptions.py @@ -1,9 +1,9 @@ +from abc import ABC, abstractmethod from typing import Dict -from abc import ABC, abstractmethod +from can import CanError from .constants import ReturnCode -from can import CanError class UcanException(CanError, ABC): diff --git a/can/interfaces/systec/structures.py b/can/interfaces/systec/structures.py index 841474b80..699763989 100644 --- a/can/interfaces/systec/structures.py +++ b/can/interfaces/systec/structures.py @@ -1,12 +1,20 @@ -from ctypes import Structure, POINTER, sizeof +import os +from ctypes import POINTER, Structure, sizeof +from ctypes import ( + c_long as BOOL, +) from ctypes import ( c_ubyte as BYTE, - c_ushort as WORD, +) +from ctypes import ( c_ulong as DWORD, - c_long as BOOL, +) +from ctypes import ( + c_ushort as WORD, +) +from ctypes import ( c_void_p as LPVOID, ) -import os # Workaround for Unix based platforms to be able to load structures for testing, etc... if os.name == "nt": diff --git a/can/interfaces/systec/ucan.py b/can/interfaces/systec/ucan.py index a6de4e9f5..bbc484314 100644 --- a/can/interfaces/systec/ucan.py +++ b/can/interfaces/systec/ucan.py @@ -1,14 +1,12 @@ import logging import sys - from ctypes import byref from ctypes import c_wchar_p as LPWSTR from ...exceptions import CanInterfaceNotImplementedError - from .constants import * -from .structures import * from .exceptions import * +from .structures import * log = logging.getLogger("can.systec") diff --git a/can/interfaces/systec/ucanbus.py b/can/interfaces/systec/ucanbus.py index 7d8b6133a..da05b38b1 100644 --- a/can/interfaces/systec/ucanbus.py +++ b/can/interfaces/systec/ucanbus.py @@ -2,11 +2,11 @@ from threading import Event from can import BusABC, BusState, Message -from ...exceptions import CanError, CanInitializationError, CanOperationError +from ...exceptions import CanError, CanInitializationError, CanOperationError from .constants import * -from .structures import * from .exceptions import UcanException +from .structures import * from .ucan import UcanServer log = logging.getLogger("can.systec") diff --git a/can/interfaces/udp_multicast/__init__.py b/can/interfaces/udp_multicast/__init__.py index 0ce1ce389..a9d87b139 100644 --- a/can/interfaces/udp_multicast/__init__.py +++ b/can/interfaces/udp_multicast/__init__.py @@ -1,3 +1,3 @@ """A module to allow CAN over UDP on IPv4/IPv6 multicast.""" -from .bus import UdpMulticastBus +from .bus import UdpMulticastBus as UdpMulticastBus diff --git a/can/interfaces/udp_multicast/bus.py b/can/interfaces/udp_multicast/bus.py index 5c7bee3e8..00cbd32c8 100644 --- a/can/interfaces/udp_multicast/bus.py +++ b/can/interfaces/udp_multicast/bus.py @@ -17,8 +17,7 @@ from can import BusABC from can.typechecking import AutoDetectedConfig -from .utils import pack_message, unpack_message, check_msgpack_installed - +from .utils import check_msgpack_installed, pack_message, unpack_message # see socket.getaddrinfo() IPv4_ADDRESS_INFO = Tuple[str, int] # address, port diff --git a/can/interfaces/udp_multicast/utils.py b/can/interfaces/udp_multicast/utils.py index 2658bf0a9..35a0df185 100644 --- a/can/interfaces/udp_multicast/utils.py +++ b/can/interfaces/udp_multicast/utils.py @@ -2,12 +2,9 @@ Defines common functions. """ -from typing import Any -from typing import Dict -from typing import Optional +from typing import Any, Dict, Optional -from can import Message -from can import CanInterfaceNotImplementedError +from can import CanInterfaceNotImplementedError, Message from can.typechecking import ReadableBytesLike try: diff --git a/can/interfaces/usb2can/__init__.py b/can/interfaces/usb2can/__init__.py index 4ccff1cb0..16b1430e1 100644 --- a/can/interfaces/usb2can/__init__.py +++ b/can/interfaces/usb2can/__init__.py @@ -1,5 +1,5 @@ """ """ -from .usb2canInterface import Usb2canBus -from .usb2canabstractionlayer import Usb2CanAbstractionLayer +from .usb2canabstractionlayer import Usb2CanAbstractionLayer as Usb2CanAbstractionLayer +from .usb2canInterface import Usb2canBus as Usb2canBus diff --git a/can/interfaces/usb2can/usb2canInterface.py b/can/interfaces/usb2can/usb2canInterface.py index bca40f8d3..2c0a0d00f 100644 --- a/can/interfaces/usb2can/usb2canInterface.py +++ b/can/interfaces/usb2can/usb2canInterface.py @@ -6,14 +6,17 @@ from ctypes import byref from typing import Optional -from can import BusABC, Message, CanInitializationError, CanOperationError -from .usb2canabstractionlayer import Usb2CanAbstractionLayer, CanalMsg, CanalError +from can import BusABC, CanInitializationError, CanOperationError, Message + +from .serial_selector import find_serial_devices from .usb2canabstractionlayer import ( IS_ERROR_FRAME, - IS_REMOTE_FRAME, IS_ID_TYPE, + IS_REMOTE_FRAME, + CanalError, + CanalMsg, + Usb2CanAbstractionLayer, ) -from .serial_selector import find_serial_devices # Set up logging log = logging.getLogger("can.usb2can") diff --git a/can/interfaces/usb2can/usb2canabstractionlayer.py b/can/interfaces/usb2can/usb2canabstractionlayer.py index a6708cb42..a894c3953 100644 --- a/can/interfaces/usb2can/usb2canabstractionlayer.py +++ b/can/interfaces/usb2can/usb2canabstractionlayer.py @@ -3,11 +3,12 @@ Socket CAN is recommended under Unix/Linux systems. """ +import logging from ctypes import * from enum import IntEnum -import logging import can + from ...exceptions import error_check from ...typechecking import StringPathLike diff --git a/can/interfaces/vector/__init__.py b/can/interfaces/vector/__init__.py index c5eae7140..6769b5173 100644 --- a/can/interfaces/vector/__init__.py +++ b/can/interfaces/vector/__init__.py @@ -1,12 +1,12 @@ """ """ -from .canlib import ( - VectorBus, - get_channel_configs, - VectorChannelConfig, - VectorBusParams, - VectorCanParams, - VectorCanFdParams, -) -from .exceptions import VectorError, VectorOperationError, VectorInitializationError +from .canlib import VectorBus as VectorBus +from .canlib import VectorBusParams as VectorBusParams +from .canlib import VectorCanFdParams as VectorCanFdParams +from .canlib import VectorCanParams as VectorCanParams +from .canlib import VectorChannelConfig as VectorChannelConfig +from .canlib import get_channel_configs as get_channel_configs +from .exceptions import VectorError as VectorError +from .exceptions import VectorInitializationError as VectorInitializationError +from .exceptions import VectorOperationError as VectorOperationError diff --git a/can/interfaces/vector/canlib.py b/can/interfaces/vector/canlib.py index d53b1418d..e60d20b0d 100644 --- a/can/interfaces/vector/canlib.py +++ b/can/interfaces/vector/canlib.py @@ -8,19 +8,19 @@ # ============================== import ctypes import logging -import time import os +import time from types import ModuleType from typing import ( + Any, + Callable, + Dict, List, NamedTuple, Optional, - Tuple, Sequence, + Tuple, Union, - Any, - Dict, - Callable, cast, ) @@ -28,7 +28,7 @@ INFINITE: Optional[int] try: # Try builtin Python 3 Windows API - from _winapi import WaitForSingleObject, INFINITE # type: ignore + from _winapi import INFINITE, WaitForSingleObject # type: ignore HAS_EVENTS = True except ImportError: @@ -38,21 +38,21 @@ # Import Modules # ============== from can import ( - BusABC, - Message, - CanInterfaceNotImplementedError, - CanInitializationError, BitTiming, BitTimingFd, + BusABC, + CanInitializationError, + CanInterfaceNotImplementedError, + Message, ) +from can.typechecking import AutoDetectedConfig, CanFilters from can.util import ( - len2dlc, - dlc2len, + check_or_adjust_timing_clock, deprecated_args_alias, + dlc2len, + len2dlc, time_perfcounter_correlation, - check_or_adjust_timing_clock, ) -from can.typechecking import AutoDetectedConfig, CanFilters # Define Module Logger # ==================== @@ -60,8 +60,8 @@ # Import Vector API modules # ========================= +from . import xlclass, xldefine from .exceptions import VectorError, VectorInitializationError, VectorOperationError -from . import xldefine, xlclass # Import safely Vector API module for Travis tests xldriver: Optional[ModuleType] = None diff --git a/can/interfaces/vector/xldefine.py b/can/interfaces/vector/xldefine.py index e2fd288b9..ebc0971c1 100644 --- a/can/interfaces/vector/xldefine.py +++ b/can/interfaces/vector/xldefine.py @@ -6,7 +6,6 @@ # ============================== from enum import IntEnum, IntFlag - MAX_MSG_LEN = 8 XL_CAN_MAX_DATA_LEN = 64 XL_INVALID_PORTHANDLE = -1 diff --git a/can/interfaces/vector/xldriver.py b/can/interfaces/vector/xldriver.py index 29791e32f..f84b3cf1d 100644 --- a/can/interfaces/vector/xldriver.py +++ b/can/interfaces/vector/xldriver.py @@ -10,7 +10,8 @@ import ctypes import logging import platform -from .exceptions import VectorOperationError, VectorInitializationError + +from .exceptions import VectorInitializationError, VectorOperationError # Define Module Logger # ==================== diff --git a/can/interfaces/virtual.py b/can/interfaces/virtual.py index ad8774147..3eaefc230 100644 --- a/can/interfaces/virtual.py +++ b/can/interfaces/virtual.py @@ -6,14 +6,13 @@ and reside in the same process will receive the same messages. """ -from typing import Any, Dict, List, Optional, Tuple, TYPE_CHECKING - -from copy import deepcopy import logging -import time import queue -from threading import RLock +import time +from copy import deepcopy from random import randint +from threading import RLock +from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple from can import CanOperationError from can.bus import BusABC diff --git a/can/io/__init__.py b/can/io/__init__.py index 6dc9ac1af..4ba47a1fc 100644 --- a/can/io/__init__.py +++ b/can/io/__init__.py @@ -4,14 +4,26 @@ """ # Generic -from .logger import Logger, BaseRotatingLogger, SizedRotatingLogger -from .player import LogReader, MessageSync +from .logger import BaseRotatingLogger as BaseRotatingLogger +from .logger import Logger as Logger +from .logger import SizedRotatingLogger as SizedRotatingLogger +from .player import LogReader as LogReader +from .player import MessageSync as MessageSync + +# isort: split # Format specific -from .asc import ASCWriter, ASCReader -from .blf import BLFReader, BLFWriter -from .canutils import CanutilsLogReader, CanutilsLogWriter -from .csv import CSVWriter, CSVReader -from .sqlite import SqliteReader, SqliteWriter -from .printer import Printer -from .trc import TRCReader, TRCWriter, TRCFileVersion +from .asc import ASCReader as ASCReader +from .asc import ASCWriter as ASCWriter +from .blf import BLFReader as BLFReader +from .blf import BLFWriter as BLFWriter +from .canutils import CanutilsLogReader as CanutilsLogReader +from .canutils import CanutilsLogWriter as CanutilsLogWriter +from .csv import CSVReader as CSVReader +from .csv import CSVWriter as CSVWriter +from .printer import Printer as Printer +from .sqlite import SqliteReader as SqliteReader +from .sqlite import SqliteWriter as SqliteWriter +from .trc import TRCFileVersion as TRCFileVersion +from .trc import TRCReader as TRCReader +from .trc import TRCWriter as TRCWriter diff --git a/can/io/asc.py b/can/io/asc.py index a380f6b16..b8054ecfc 100644 --- a/can/io/asc.py +++ b/can/io/asc.py @@ -5,18 +5,16 @@ - https://bitbucket.org/tobylorenz/vector_asc/src/master/src/Vector/ASC/tests/unittests/data/ - under `test/data/logfile.asc` """ +import logging import re -from typing import Any, Generator, List, Optional, Dict, Union, TextIO - -from datetime import datetime import time -import logging +from datetime import datetime +from typing import Any, Dict, Generator, List, Optional, TextIO, Union from ..message import Message -from ..util import channel2int, len2dlc, dlc2len -from .generic import FileIOMessageWriter, MessageReader from ..typechecking import StringPathLike - +from ..util import channel2int, dlc2len, len2dlc +from .generic import FileIOMessageWriter, MessageReader CAN_MSG_EXT = 0x80000000 CAN_ID_MASK = 0x1FFFFFFF diff --git a/can/io/blf.py b/can/io/blf.py index 8d5ade8c8..e9dd8380f 100644 --- a/can/io/blf.py +++ b/can/io/blf.py @@ -12,19 +12,18 @@ objects types. """ -import struct -import zlib import datetime -import time import logging -from typing import List, BinaryIO, Generator, Union, Tuple, Optional, cast, Any +import struct +import time +import zlib +from typing import Any, BinaryIO, Generator, List, Optional, Tuple, Union, cast from ..message import Message -from ..util import len2dlc, dlc2len, channel2int from ..typechecking import StringPathLike +from ..util import channel2int, dlc2len, len2dlc from .generic import FileIOMessageWriter, MessageReader - TSystemTime = Tuple[int, int, int, int, int, int, int, int] diff --git a/can/io/canutils.py b/can/io/canutils.py index 17d7a193f..a9dced6a1 100644 --- a/can/io/canutils.py +++ b/can/io/canutils.py @@ -5,11 +5,12 @@ """ import logging -from typing import Generator, TextIO, Union, Any +from typing import Any, Generator, TextIO, Union from can.message import Message -from .generic import FileIOMessageWriter, MessageReader + from ..typechecking import StringPathLike +from .generic import FileIOMessageWriter, MessageReader log = logging.getLogger("can.io.canutils") diff --git a/can/io/csv.py b/can/io/csv.py index 7570d4f30..b96e69342 100644 --- a/can/io/csv.py +++ b/can/io/csv.py @@ -9,12 +9,13 @@ of a CSV file. """ -from base64 import b64encode, b64decode -from typing import TextIO, Generator, Union, Any +from base64 import b64decode, b64encode +from typing import Any, Generator, TextIO, Union from can.message import Message -from .generic import FileIOMessageWriter, MessageReader + from ..typechecking import StringPathLike +from .generic import FileIOMessageWriter, MessageReader class CSVReader(MessageReader): diff --git a/can/io/generic.py b/can/io/generic.py index 77bba4501..193ec3df2 100644 --- a/can/io/generic.py +++ b/can/io/generic.py @@ -1,19 +1,21 @@ """Contains generic base classes for file IO.""" import locale from abc import ABCMeta +from types import TracebackType from typing import ( - Optional, - cast, + Any, + ContextManager, Iterable, + Optional, Type, - ContextManager, - Any, + cast, ) + from typing_extensions import Literal -from types import TracebackType -import can -import can.typechecking +from .. import typechecking +from ..listener import Listener +from ..message import Message class BaseIOHandler(ContextManager, metaclass=ABCMeta): @@ -26,11 +28,11 @@ class BaseIOHandler(ContextManager, metaclass=ABCMeta): was opened """ - file: Optional[can.typechecking.FileLike] + file: Optional[typechecking.FileLike] def __init__( self, - file: Optional[can.typechecking.AcceptedIOType], + file: Optional[typechecking.AcceptedIOType], mode: str = "rt", **kwargs: Any, ) -> None: @@ -42,7 +44,7 @@ def __init__( """ if file is None or (hasattr(file, "read") and hasattr(file, "write")): # file is None or some file-like object - self.file = cast(Optional[can.typechecking.FileLike], file) + self.file = cast(Optional[typechecking.FileLike], file) else: encoding: Optional[str] = ( None @@ -52,10 +54,8 @@ def __init__( # pylint: disable=consider-using-with # file is some path-like object self.file = cast( - can.typechecking.FileLike, - open( - cast(can.typechecking.StringPathLike, file), mode, encoding=encoding - ), + typechecking.FileLike, + open(cast(typechecking.StringPathLike, file), mode, encoding=encoding), ) # for multiple inheritance @@ -80,19 +80,19 @@ def stop(self) -> None: self.file.close() -class MessageWriter(BaseIOHandler, can.Listener, metaclass=ABCMeta): +class MessageWriter(BaseIOHandler, Listener, metaclass=ABCMeta): """The base class for all writers.""" - file: Optional[can.typechecking.FileLike] + file: Optional[typechecking.FileLike] class FileIOMessageWriter(MessageWriter, metaclass=ABCMeta): """A specialized base class for all writers with file descriptors.""" - file: can.typechecking.FileLike + file: typechecking.FileLike def __init__( - self, file: can.typechecking.AcceptedIOType, mode: str = "wt", **kwargs: Any + self, file: typechecking.AcceptedIOType, mode: str = "wt", **kwargs: Any ) -> None: # Not possible with the type signature, but be verbose for user-friendliness if file is None: @@ -105,5 +105,5 @@ def file_size(self) -> int: return self.file.tell() -class MessageReader(BaseIOHandler, Iterable[can.Message], metaclass=ABCMeta): +class MessageReader(BaseIOHandler, Iterable[Message], metaclass=ABCMeta): """The base class for all readers.""" diff --git a/can/io/logger.py b/can/io/logger.py index 0477fa065..de538e866 100644 --- a/can/io/logger.py +++ b/can/io/logger.py @@ -2,29 +2,28 @@ See the :class:`Logger` class. """ +import gzip import os import pathlib from abc import ABC, abstractmethod from datetime import datetime -import gzip -from typing import Any, Optional, Callable, Type, Tuple, cast, Dict, Set - from types import TracebackType +from typing import Any, Callable, Dict, Optional, Set, Tuple, Type, cast -from typing_extensions import Literal from pkg_resources import iter_entry_points +from typing_extensions import Literal -from ..message import Message from ..listener import Listener -from .generic import BaseIOHandler, FileIOMessageWriter, MessageWriter +from ..message import Message +from ..typechecking import AcceptedIOType, FileLike, StringPathLike from .asc import ASCWriter from .blf import BLFWriter from .canutils import CanutilsLogWriter from .csv import CSVWriter -from .sqlite import SqliteWriter +from .generic import BaseIOHandler, FileIOMessageWriter, MessageWriter from .printer import Printer +from .sqlite import SqliteWriter from .trc import TRCWriter -from ..typechecking import StringPathLike, FileLike, AcceptedIOType class Logger(MessageWriter): diff --git a/can/io/player.py b/can/io/player.py index 13a9ce60e..022ed503b 100644 --- a/can/io/player.py +++ b/can/io/player.py @@ -10,15 +10,15 @@ from pkg_resources import iter_entry_points -from .generic import MessageReader +from ..message import Message +from ..typechecking import AcceptedIOType, FileLike, StringPathLike from .asc import ASCReader from .blf import BLFReader from .canutils import CanutilsLogReader from .csv import CSVReader +from .generic import MessageReader from .sqlite import SqliteReader from .trc import TRCReader -from ..typechecking import StringPathLike, FileLike, AcceptedIOType -from ..message import Message class LogReader(MessageReader): diff --git a/can/io/printer.py b/can/io/printer.py index 01da12e84..d0df71db8 100644 --- a/can/io/printer.py +++ b/can/io/printer.py @@ -3,12 +3,11 @@ """ import logging - -from typing import Optional, TextIO, Union, Any, cast +from typing import Any, Optional, TextIO, Union, cast from ..message import Message -from .generic import MessageWriter from ..typechecking import StringPathLike +from .generic import MessageWriter log = logging.getLogger("can.io.printer") diff --git a/can/io/sqlite.py b/can/io/sqlite.py index 33f5d293f..43fd761e9 100644 --- a/can/io/sqlite.py +++ b/can/io/sqlite.py @@ -4,16 +4,17 @@ .. note:: The database schema is given in the documentation of the loggers. """ -import time -import threading import logging import sqlite3 -from typing import Generator, Any +import threading +import time +from typing import Any, Generator from can.listener import BufferedReader from can.message import Message -from .generic import MessageWriter, MessageReader + from ..typechecking import StringPathLike +from .generic import MessageReader, MessageWriter log = logging.getLogger("can.io.sqlite") diff --git a/can/io/trc.py b/can/io/trc.py index d1ee2b72d..75c81b502 100644 --- a/can/io/trc.py +++ b/can/io/trc.py @@ -7,18 +7,17 @@ Version 1.1 will be implemented as it is most commonly used """ # noqa -from datetime import datetime, timedelta, timezone -from enum import Enum import io -import os import logging -from typing import Generator, Optional, Union, TextIO, Callable, List, Dict +import os +from datetime import datetime, timedelta, timezone +from enum import Enum +from typing import Callable, Dict, Generator, List, Optional, TextIO, Union from ..message import Message -from ..util import channel2int, len2dlc, dlc2len -from .generic import FileIOMessageWriter, MessageReader from ..typechecking import StringPathLike - +from ..util import channel2int, dlc2len, len2dlc +from .generic import FileIOMessageWriter, MessageReader logger = logging.getLogger("can.io.trc") diff --git a/can/listener.py b/can/listener.py index e68d813d1..d6f252d17 100644 --- a/can/listener.py +++ b/can/listener.py @@ -2,15 +2,15 @@ This module contains the implementation of `can.Listener` and some readers. """ +import asyncio import sys import warnings -import asyncio from abc import ABCMeta, abstractmethod -from queue import SimpleQueue, Empty +from queue import Empty, SimpleQueue from typing import Any, AsyncIterator, Optional -from can.message import Message from can.bus import BusABC +from can.message import Message class Listener(metaclass=ABCMeta): diff --git a/can/logconvert.py b/can/logconvert.py index 7a34deb61..49cdaf4bb 100644 --- a/can/logconvert.py +++ b/can/logconvert.py @@ -2,11 +2,11 @@ Convert a log file from one format to another. """ -import sys import argparse import errno +import sys -from can import LogReader, Logger, SizedRotatingLogger +from can import Logger, LogReader, SizedRotatingLogger class ArgumentParser(argparse.ArgumentParser): diff --git a/can/logger.py b/can/logger.py index 9448fe6b4..42312324a 100644 --- a/can/logger.py +++ b/can/logger.py @@ -1,14 +1,15 @@ +import argparse +import errno import re import sys -import argparse from datetime import datetime -import errno -from typing import Any, Dict, List, Union, Sequence, Tuple +from typing import Any, Dict, List, Sequence, Tuple, Union import can from can.io import BaseRotatingLogger from can.io.generic import MessageWriter from can.util import cast_from_string + from . import Bus, BusState, Logger, SizedRotatingLogger from .typechecking import CanFilter, CanFilters diff --git a/can/message.py b/can/message.py index 48933b2da..05700ef72 100644 --- a/can/message.py +++ b/can/message.py @@ -6,13 +6,12 @@ starting with Python 3.7. """ +from copy import deepcopy +from math import isinf, isnan from typing import Optional from . import typechecking -from copy import deepcopy -from math import isinf, isnan - class Message: # pylint: disable=too-many-instance-attributes; OK for a dataclass """ diff --git a/can/notifier.py b/can/notifier.py index 2adae431e..fce210f49 100644 --- a/can/notifier.py +++ b/can/notifier.py @@ -6,7 +6,7 @@ import logging import threading import time -from typing import Callable, Iterable, List, Optional, Union, Awaitable +from typing import Awaitable, Callable, Iterable, List, Optional, Union from can.bus import BusABC from can.listener import Listener diff --git a/can/player.py b/can/player.py index fab271824..40e4cc43a 100644 --- a/can/player.py +++ b/can/player.py @@ -5,11 +5,11 @@ Similar to canplayer in the can-utils package. """ -import sys import argparse -from datetime import datetime import errno -from typing import cast, Iterable +import sys +from datetime import datetime +from typing import Iterable, cast from can import LogReader, Message, MessageSync diff --git a/can/thread_safe_bus.py b/can/thread_safe_bus.py index 6f16b8b4d..4793ed1ff 100644 --- a/can/thread_safe_bus.py +++ b/can/thread_safe_bus.py @@ -12,7 +12,6 @@ from .interface import Bus - try: from contextlib import nullcontext diff --git a/can/util.py b/can/util.py index 42d99272e..2f6fb1957 100644 --- a/can/util.py +++ b/can/util.py @@ -11,24 +11,24 @@ import re import warnings from configparser import ConfigParser -from time import time, perf_counter, get_clock_info +from time import get_clock_info, perf_counter, time from typing import ( Any, Callable, - cast, Dict, Iterable, - Tuple, Optional, - Union, + Tuple, TypeVar, + Union, + cast, ) import can + from . import typechecking from .bit_timing import BitTiming, BitTimingFd -from .exceptions import CanInitializationError -from .exceptions import CanInterfaceNotImplementedError +from .exceptions import CanInitializationError, CanInterfaceNotImplementedError from .interfaces import VALID_INTERFACES log = logging.getLogger("can.util") diff --git a/can/viewer.py b/can/viewer.py index 5539ee3fb..be7f76b73 100644 --- a/can/viewer.py +++ b/can/viewer.py @@ -30,20 +30,21 @@ from typing import Dict, List, Tuple, Union from can import __version__ + from .logger import ( - _create_bus, - _parse_filters, _append_filter_argument, _create_base_argument_parser, + _create_bus, _parse_additional_config, + _parse_filters, ) - logger = logging.getLogger("can.viewer") try: import curses - from curses.ascii import ESC as KEY_ESC, SP as KEY_SPACE + from curses.ascii import ESC as KEY_ESC + from curses.ascii import SP as KEY_SPACE except ImportError: # Probably on Windows while windows-curses is not installed (e.g. in PyPy) logger.warning( diff --git a/doc/conf.py b/doc/conf.py index cea93440d..aa61f243b 100755 --- a/doc/conf.py +++ b/doc/conf.py @@ -6,9 +6,9 @@ # -- Imports ------------------------------------------------------------------- -import sys -import os import ctypes +import os +import sys from unittest.mock import MagicMock # If extensions (or modules to document with autodoc) are in another directory, diff --git a/pyproject.toml b/pyproject.toml index 17d87f033..af952e51e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,3 +4,16 @@ requires = [ "wheel", ] build-backend = "setuptools.build_meta" + +[tool.ruff] +select = [ + "F401", # unused-imports + "UP", # pyupgrade + "I", # isort +] + +# Assume Python 3.7. +target-version = "py37" + +[tool.ruff.isort] +known-first-party = ["can"] diff --git a/requirements-lint.txt b/requirements-lint.txt index f1070e1b9..829fe5663 100644 --- a/requirements-lint.txt +++ b/requirements-lint.txt @@ -1,4 +1,5 @@ pylint==2.16.4 +ruff==0.0.260 black~=23.1.0 mypy==1.0.1 mypy-extensions==0.4.3 diff --git a/setup.py b/setup.py index 96cbc0c77..b6dfab6f2 100644 --- a/setup.py +++ b/setup.py @@ -5,11 +5,12 @@ Learn more at https://github.com/hardbyte/python-can/ """ +import logging +import re from os import listdir from os.path import isfile, join -import re -import logging -from setuptools import setup, find_packages + +from setuptools import find_packages, setup logging.basicConfig(level=logging.WARNING) diff --git a/test/back2back_test.py b/test/back2back_test.py index 48c98bf59..52bfaf716 100644 --- a/test/back2back_test.py +++ b/test/back2back_test.py @@ -4,10 +4,10 @@ This module tests two buses attached to each other. """ +import random import unittest -from time import sleep, time from multiprocessing.dummy import Pool as ThreadPool -import random +from time import sleep, time import pytest @@ -17,12 +17,12 @@ from .config import ( IS_CI, - IS_UNIX, IS_OSX, + IS_PYPY, IS_TRAVIS, - TEST_INTERFACE_SOCKETCAN, + IS_UNIX, TEST_CAN_FD, - IS_PYPY, + TEST_INTERFACE_SOCKETCAN, ) diff --git a/test/contextmanager_test.py b/test/contextmanager_test.py index 014dfb121..3adb1e7c6 100644 --- a/test/contextmanager_test.py +++ b/test/contextmanager_test.py @@ -5,6 +5,7 @@ """ import unittest + import can diff --git a/test/listener_test.py b/test/listener_test.py index 9b2e9e93b..b530afa60 100644 --- a/test/listener_test.py +++ b/test/listener_test.py @@ -3,13 +3,13 @@ """ """ import asyncio -import unittest -import random import logging -import tempfile import os +import random +import tempfile +import unittest import warnings -from os.path import join, dirname +from os.path import dirname, join import can diff --git a/test/logformats_test.py b/test/logformats_test.py index 3486827a9..d3b0eb015 100644 --- a/test/logformats_test.py +++ b/test/logformats_test.py @@ -12,23 +12,24 @@ TODO: correctly set preserves_channel and adds_default_channel """ import logging -import unittest -from parameterized import parameterized -import tempfile import os -from abc import abstractmethod, ABCMeta -from itertools import zip_longest +import tempfile +import unittest +from abc import ABCMeta, abstractmethod from datetime import datetime +from itertools import zip_longest + +from parameterized import parameterized import can from can.io import blf from .data.example_data import ( + TEST_COMMENTS, TEST_MESSAGES_BASE, - TEST_MESSAGES_REMOTE_FRAMES, - TEST_MESSAGES_ERROR_FRAMES, TEST_MESSAGES_CAN_FD, - TEST_COMMENTS, + TEST_MESSAGES_ERROR_FRAMES, + TEST_MESSAGES_REMOTE_FRAMES, sort_messages, ) from .message_helper import ComparingMessagesTestCase diff --git a/test/network_test.py b/test/network_test.py index 58c305a38..61690c1b4 100644 --- a/test/network_test.py +++ b/test/network_test.py @@ -1,10 +1,10 @@ #!/usr/bin/env python -import unittest -import threading -import random import logging +import random +import threading +import unittest logging.getLogger(__file__).setLevel(logging.WARNING) diff --git a/test/notifier_test.py b/test/notifier_test.py index ca2093f55..6982130cf 100644 --- a/test/notifier_test.py +++ b/test/notifier_test.py @@ -1,8 +1,8 @@ #!/usr/bin/env python -import unittest -import time import asyncio +import time +import unittest import can diff --git a/test/serial_test.py b/test/serial_test.py index e1df96435..d020d7232 100644 --- a/test/serial_test.py +++ b/test/serial_test.py @@ -12,9 +12,8 @@ import can from can.interfaces.serial.serial_can import SerialBus -from .message_helper import ComparingMessagesTestCase from .config import IS_PYPY - +from .message_helper import ComparingMessagesTestCase # Mentioned in #1010 TIMEOUT = 0.5 if IS_PYPY else 0.1 # 0.1 is the default set in SerialBus diff --git a/test/simplecyclic_test.py b/test/simplecyclic_test.py index 4454cbd27..9e01be457 100644 --- a/test/simplecyclic_test.py +++ b/test/simplecyclic_test.py @@ -4,10 +4,10 @@ This module tests cyclic send tasks. """ -from time import sleep +import gc import unittest +from time import sleep from unittest.mock import MagicMock -import gc import can diff --git a/test/test_cyclic_socketcan.py b/test/test_cyclic_socketcan.py index 30c86d6a5..f19ce95b9 100644 --- a/test/test_cyclic_socketcan.py +++ b/test/test_cyclic_socketcan.py @@ -3,9 +3,9 @@ """ This module tests multiple message cyclic send tasks. """ +import time import unittest -import time import can from .config import TEST_INTERFACE_SOCKETCAN diff --git a/test/test_interface_canalystii.py b/test/test_interface_canalystii.py index 4f3033e10..0a87f40f9 100755 --- a/test/test_interface_canalystii.py +++ b/test/test_interface_canalystii.py @@ -1,10 +1,14 @@ #!/usr/bin/env python +""" +""" + import unittest -from unittest.mock import patch, call from ctypes import c_ubyte +from unittest.mock import call, patch import canalystii as driver # low-level driver module, mock out this layer + import can from can.interfaces.canalystii import CANalystIIBus diff --git a/test/test_interface_ixxat.py b/test/test_interface_ixxat.py index 484a88b58..2ff016d97 100644 --- a/test/test_interface_ixxat.py +++ b/test/test_interface_ixxat.py @@ -8,6 +8,7 @@ """ import unittest + import can diff --git a/test/test_interface_ixxat_fd.py b/test/test_interface_ixxat_fd.py index 80060a7ed..7274498aa 100644 --- a/test/test_interface_ixxat_fd.py +++ b/test/test_interface_ixxat_fd.py @@ -8,6 +8,7 @@ """ import unittest + import can diff --git a/test/test_kvaser.py b/test/test_kvaser.py index fda8b8316..6e7ccea38 100644 --- a/test/test_kvaser.py +++ b/test/test_kvaser.py @@ -10,8 +10,7 @@ import pytest import can -from can.interfaces.kvaser import canlib -from can.interfaces.kvaser import constants +from can.interfaces.kvaser import canlib, constants class KvaserTest(unittest.TestCase): diff --git a/test/test_logger.py b/test/test_logger.py index bb0015a89..083e4d19c 100644 --- a/test/test_logger.py +++ b/test/test_logger.py @@ -4,12 +4,12 @@ This module tests the functions inside of logger.py """ -import unittest -from unittest import mock -from unittest.mock import Mock import gzip import os import sys +import unittest +from unittest import mock +from unittest.mock import Mock import pytest diff --git a/test/test_message_class.py b/test/test_message_class.py index 4840402ff..8e2367034 100644 --- a/test/test_message_class.py +++ b/test/test_message_class.py @@ -1,22 +1,21 @@ #!/usr/bin/env python -import unittest +import pickle import sys -from math import isinf, isnan +import unittest from copy import copy, deepcopy -import pickle from datetime import timedelta +from math import isinf, isnan -from hypothesis import HealthCheck, given, settings import hypothesis.errors import hypothesis.strategies as st +import pytest +from hypothesis import HealthCheck, given, settings from can import Message +from .config import IS_GITHUB_ACTIONS, IS_PYPY, IS_WINDOWS from .message_helper import ComparingMessagesTestCase -from .config import IS_GITHUB_ACTIONS, IS_WINDOWS, IS_PYPY - -import pytest class TestMessageClass(unittest.TestCase): diff --git a/test/test_message_filtering.py b/test/test_message_filtering.py index e6fe16d46..a73e07aa2 100644 --- a/test/test_message_filtering.py +++ b/test/test_message_filtering.py @@ -10,7 +10,6 @@ from .data.example_data import TEST_ALL_MESSAGES - EXAMPLE_MSG = Message(arbitration_id=0x123, is_extended_id=True) HIGHEST_MSG = Message(arbitration_id=0x1FFFFFFF, is_extended_id=True) diff --git a/test/test_message_sync.py b/test/test_message_sync.py index 7552915e7..90cbe372c 100644 --- a/test/test_message_sync.py +++ b/test/test_message_sync.py @@ -4,19 +4,18 @@ This module tests :class:`can.MessageSync`. """ -from copy import copy -import time import gc - +import time import unittest +from copy import copy + import pytest -from can import MessageSync, Message +from can import Message, MessageSync -from .config import IS_CI, IS_TRAVIS, IS_OSX, IS_GITHUB_ACTIONS, IS_LINUX -from .message_helper import ComparingMessagesTestCase +from .config import IS_CI, IS_GITHUB_ACTIONS, IS_LINUX, IS_OSX, IS_TRAVIS from .data.example_data import TEST_MESSAGES_BASE - +from .message_helper import ComparingMessagesTestCase TEST_FEWER_MESSAGES = TEST_MESSAGES_BASE[::2] diff --git a/test/test_neousys.py b/test/test_neousys.py index 26a220048..3acbf6389 100644 --- a/test/test_neousys.py +++ b/test/test_neousys.py @@ -1,20 +1,14 @@ #!/usr/bin/env python -import ctypes -import os -import pickle import unittest -from unittest.mock import Mock - from ctypes import ( + POINTER, byref, + c_ubyte, cast, - POINTER, sizeof, - c_ubyte, ) - -import pytest +from unittest.mock import Mock import can from can.interfaces.neousys import neousys diff --git a/test/test_neovi.py b/test/test_neovi.py index 181f92377..d8f54960a 100644 --- a/test/test_neovi.py +++ b/test/test_neovi.py @@ -4,6 +4,7 @@ """ import pickle import unittest + from can.interfaces.ics_neovi import ICSApiError diff --git a/test/test_player.py b/test/test_player.py index 9bdd484b8..5ad6e774c 100755 --- a/test/test_player.py +++ b/test/test_player.py @@ -4,12 +4,13 @@ This module tests the functions inside of player.py """ +import io +import os +import sys import unittest from unittest import mock from unittest.mock import Mock -import os -import sys -import io + import can import can.player diff --git a/test/test_robotell.py b/test/test_robotell.py index 64f4acaf1..c0658ef2c 100644 --- a/test/test_robotell.py +++ b/test/test_robotell.py @@ -1,6 +1,7 @@ #!/usr/bin/env python import unittest + import can diff --git a/test/test_rotating_loggers.py b/test/test_rotating_loggers.py index ad4388bf7..8230168b9 100644 --- a/test/test_rotating_loggers.py +++ b/test/test_rotating_loggers.py @@ -9,6 +9,7 @@ from unittest.mock import Mock import can + from .data.example_data import generate_message diff --git a/test/test_scripts.py b/test/test_scripts.py index a22820bd8..e7bd7fd09 100644 --- a/test/test_scripts.py +++ b/test/test_scripts.py @@ -4,10 +4,10 @@ This module tests that the scripts are all callable. """ +import errno import subprocess -import unittest import sys -import errno +import unittest from abc import ABCMeta, abstractmethod from .config import * diff --git a/test/test_slcan.py b/test/test_slcan.py index 8db2d402a..774a2dec5 100644 --- a/test/test_slcan.py +++ b/test/test_slcan.py @@ -1,9 +1,10 @@ #!/usr/bin/env python import unittest + import can -from .config import IS_PYPY +from .config import IS_PYPY """ Mentioned in #1010 & #1490 diff --git a/test/test_socketcan.py b/test/test_socketcan.py index 324890dad..90a143a36 100644 --- a/test/test_socketcan.py +++ b/test/test_socketcan.py @@ -8,8 +8,8 @@ import unittest import warnings from unittest.mock import patch -import can +import can from can.interfaces.socketcan.constants import ( CAN_BCM_TX_DELETE, CAN_BCM_TX_SETUP, @@ -18,13 +18,14 @@ TX_COUNTEVT, ) from can.interfaces.socketcan.socketcan import ( + BcmMsgHead, bcm_header_factory, build_bcm_header, - build_bcm_tx_delete_header, build_bcm_transmit_header, + build_bcm_tx_delete_header, build_bcm_update_header, - BcmMsgHead, ) + from .config import IS_LINUX, IS_PYPY diff --git a/test/test_socketcan_helpers.py b/test/test_socketcan_helpers.py index 29ceb11c0..0f4e1b4ea 100644 --- a/test/test_socketcan_helpers.py +++ b/test/test_socketcan_helpers.py @@ -5,13 +5,11 @@ """ import gzip -from base64 import b64decode import unittest +from base64 import b64decode from unittest import mock -from subprocess import CalledProcessError - -from can.interfaces.socketcan.utils import find_available_interfaces, error_code_to_str +from can.interfaces.socketcan.utils import error_code_to_str, find_available_interfaces from .config import IS_LINUX, TEST_INTERFACE_SOCKETCAN diff --git a/test/test_util.py b/test/test_util.py index e77401688..a4aacdf86 100644 --- a/test/test_util.py +++ b/test/test_util.py @@ -10,10 +10,10 @@ from can.util import ( _create_bus_config, _rename_kwargs, + cast_from_string, channel2int, - deprecated_args_alias, check_or_adjust_timing_clock, - cast_from_string, + deprecated_args_alias, ) diff --git a/test/test_vector.py b/test/test_vector.py index 7694b31aa..b6a0632a8 100644 --- a/test/test_vector.py +++ b/test/test_vector.py @@ -9,22 +9,24 @@ import pickle import sys import time +from test.config import IS_WINDOWS from unittest.mock import Mock import pytest import can from can.interfaces.vector import ( - canlib, - xldefine, - xlclass, + VectorBusParams, + VectorCanFdParams, + VectorCanParams, + VectorChannelConfig, VectorError, VectorInitializationError, VectorOperationError, - VectorChannelConfig, + canlib, + xlclass, + xldefine, ) -from can.interfaces.vector import VectorBusParams, VectorCanParams, VectorCanFdParams -from test.config import IS_WINDOWS XLDRIVER_FOUND = canlib.xldriver is not None diff --git a/test/test_viewer.py b/test/test_viewer.py index baef10bda..ecc594915 100644 --- a/test/test_viewer.py +++ b/test/test_viewer.py @@ -30,14 +30,13 @@ import time import unittest from collections import defaultdict -from typing import Dict, Tuple, Union +from test.config import IS_CI from unittest.mock import patch import pytest import can from can.viewer import CanViewer, parse_args -from test.config import IS_CI # Allow the curses module to be missing (e.g. on PyPy on Windows) try: diff --git a/test/zero_dlc_test.py b/test/zero_dlc_test.py index cd5e7895e..4e7596caf 100644 --- a/test/zero_dlc_test.py +++ b/test/zero_dlc_test.py @@ -3,9 +3,8 @@ """ """ -from time import sleep -import unittest import logging +import unittest import can From 81a610820fa34c71461e6027334193b55c50043e Mon Sep 17 00:00:00 2001 From: zariiii9003 <52598363+zariiii9003@users.noreply.github.com> Date: Thu, 30 Mar 2023 19:54:08 +0200 Subject: [PATCH 2/4] fix CI --- .pylintrc | 2 ++ can/__init__.py | 2 ++ 2 files changed, 4 insertions(+) diff --git a/.pylintrc b/.pylintrc index bdbf47613..549b20ad5 100644 --- a/.pylintrc +++ b/.pylintrc @@ -438,6 +438,8 @@ known-standard-library= # Force import order to recognize a module as part of a third party library. known-third-party=enchant +# Allow explicit reexports by alias from a package __init__ +allow-reexport-from-package=yes [CLASSES] diff --git a/can/__init__.py b/can/__init__.py index 3d65c1979..7c4b74a9b 100644 --- a/can/__init__.py +++ b/can/__init__.py @@ -20,6 +20,8 @@ from . import interface as interface from .bit_timing import BitTiming as BitTiming from .bit_timing import BitTimingFd as BitTimingFd +from .broadcastmanager import ModifiableCyclicTaskABC as ModifiableCyclicTaskABC +from .broadcastmanager import RestartableCyclicTaskABC as RestartableCyclicTaskABC from .bus import BusABC as BusABC from .bus import BusState as BusState from .exceptions import CanError as CanError From 07ebf2cd4f961107679948504c8f2eec6b0b1d9c Mon Sep 17 00:00:00 2001 From: zariiii9003 <52598363+zariiii9003@users.noreply.github.com> Date: Thu, 30 Mar 2023 19:58:31 +0200 Subject: [PATCH 3/4] fix CI --- can/__init__.py | 4 ++++ can/interfaces/canalystii.py | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/can/__init__.py b/can/__init__.py index 7c4b74a9b..3c4203dc2 100644 --- a/can/__init__.py +++ b/can/__init__.py @@ -20,6 +20,10 @@ from . import interface as interface from .bit_timing import BitTiming as BitTiming from .bit_timing import BitTimingFd as BitTimingFd +from .broadcastmanager import CyclicSendTaskABC as CyclicSendTaskABC +from .broadcastmanager import ( + LimitedDurationCyclicSendTaskABC as LimitedDurationCyclicSendTaskABC, +) from .broadcastmanager import ModifiableCyclicTaskABC as ModifiableCyclicTaskABC from .broadcastmanager import RestartableCyclicTaskABC as RestartableCyclicTaskABC from .bus import BusABC as BusABC diff --git a/can/interfaces/canalystii.py b/can/interfaces/canalystii.py index 35feef35c..dd65f5ba0 100644 --- a/can/interfaces/canalystii.py +++ b/can/interfaces/canalystii.py @@ -1,6 +1,6 @@ -from collections import deque import logging import time +from collections import deque from ctypes import c_ubyte from typing import Any, Deque, Dict, Optional, Sequence, Tuple, Union From 52cc6670b00b6a33545eda49492674b99205576f Mon Sep 17 00:00:00 2001 From: zariiii9003 <52598363+zariiii9003@users.noreply.github.com> Date: Thu, 30 Mar 2023 21:09:24 +0200 Subject: [PATCH 4/4] use __all__ --- .pylintrc | 2 +- can/__init__.py | 135 +++++++++++++++-------- can/interfaces/ics_neovi/__init__.py | 12 +- can/interfaces/ixxat/__init__.py | 11 +- can/interfaces/neousys/__init__.py | 4 +- can/interfaces/pcan/__init__.py | 8 +- can/interfaces/seeedstudio/__init__.py | 4 +- can/interfaces/serial/__init__.py | 4 +- can/interfaces/socketcan/__init__.py | 10 +- can/interfaces/socketcand/__init__.py | 4 +- can/interfaces/systec/__init__.py | 4 +- can/interfaces/udp_multicast/__init__.py | 4 +- can/interfaces/usb2can/__init__.py | 9 +- can/interfaces/vector/__init__.py | 30 +++-- can/io/__init__.py | 50 +++++---- 15 files changed, 195 insertions(+), 96 deletions(-) diff --git a/.pylintrc b/.pylintrc index 549b20ad5..de2e82a0d 100644 --- a/.pylintrc +++ b/.pylintrc @@ -439,7 +439,7 @@ known-standard-library= known-third-party=enchant # Allow explicit reexports by alias from a package __init__ -allow-reexport-from-package=yes +allow-reexport-from-package=no [CLASSES] diff --git a/can/__init__.py b/can/__init__.py index 3c4203dc2..5cc054c19 100644 --- a/can/__init__.py +++ b/can/__init__.py @@ -9,58 +9,101 @@ from typing import Any, Dict __version__ = "4.1.0" +__all__ = [ + "ASCReader", + "ASCWriter", + "AsyncBufferedReader", + "BitTiming", + "BitTimingFd", + "BLFReader", + "BLFWriter", + "broadcastmanager", + "BufferedReader", + "Bus", + "BusABC", + "BusState", + "CanError", + "CanInitializationError", + "CanInterfaceNotImplementedError", + "CanOperationError", + "CanTimeoutError", + "CanutilsLogReader", + "CanutilsLogWriter", + "CSVReader", + "CSVWriter", + "CyclicSendTaskABC", + "detect_available_configs", + "interface", + "LimitedDurationCyclicSendTaskABC", + "Listener", + "Logger", + "LogReader", + "ModifiableCyclicTaskABC", + "Message", + "MessageSync", + "Notifier", + "Printer", + "RedirectReader", + "RestartableCyclicTaskABC", + "set_logging_level", + "SizedRotatingLogger", + "SqliteReader", + "SqliteWriter", + "ThreadSafeBus", + "typechecking", + "TRCFileVersion", + "TRCReader", + "TRCWriter", + "util", + "VALID_INTERFACES", +] log = logging.getLogger("can") rc: Dict[str, Any] = {} -from . import typechecking as typechecking # isort:skip -from . import util as util # isort:skip -from . import broadcastmanager as broadcastmanager -from . import interface as interface -from .bit_timing import BitTiming as BitTiming -from .bit_timing import BitTimingFd as BitTimingFd -from .broadcastmanager import CyclicSendTaskABC as CyclicSendTaskABC +from . import typechecking # isort:skip +from . import util # isort:skip +from . import broadcastmanager, interface +from .bit_timing import BitTiming, BitTimingFd from .broadcastmanager import ( - LimitedDurationCyclicSendTaskABC as LimitedDurationCyclicSendTaskABC, + CyclicSendTaskABC, + LimitedDurationCyclicSendTaskABC, + ModifiableCyclicTaskABC, + RestartableCyclicTaskABC, ) -from .broadcastmanager import ModifiableCyclicTaskABC as ModifiableCyclicTaskABC -from .broadcastmanager import RestartableCyclicTaskABC as RestartableCyclicTaskABC -from .bus import BusABC as BusABC -from .bus import BusState as BusState -from .exceptions import CanError as CanError -from .exceptions import CanInitializationError as CanInitializationError +from .bus import BusABC, BusState from .exceptions import ( - CanInterfaceNotImplementedError as CanInterfaceNotImplementedError, + CanError, + CanInitializationError, + CanInterfaceNotImplementedError, + CanOperationError, + CanTimeoutError, ) -from .exceptions import CanOperationError as CanOperationError -from .exceptions import CanTimeoutError as CanTimeoutError -from .interface import Bus as Bus -from .interface import detect_available_configs as detect_available_configs -from .interfaces import VALID_INTERFACES as VALID_INTERFACES -from .io import ASCReader as ASCReader -from .io import ASCWriter as ASCWriter -from .io import BLFReader as BLFReader -from .io import BLFWriter as BLFWriter -from .io import CanutilsLogReader as CanutilsLogReader -from .io import CanutilsLogWriter as CanutilsLogWriter -from .io import CSVReader as CSVReader -from .io import CSVWriter as CSVWriter -from .io import Logger as Logger -from .io import LogReader as LogReader -from .io import MessageSync as MessageSync -from .io import Printer as Printer -from .io import SizedRotatingLogger as SizedRotatingLogger -from .io import SqliteReader as SqliteReader -from .io import SqliteWriter as SqliteWriter -from .io import TRCFileVersion as TRCFileVersion -from .io import TRCReader as TRCReader -from .io import TRCWriter as TRCWriter -from .listener import AsyncBufferedReader as AsyncBufferedReader -from .listener import BufferedReader as BufferedReader -from .listener import Listener as Listener -from .listener import RedirectReader as RedirectReader -from .message import Message as Message -from .notifier import Notifier as Notifier -from .thread_safe_bus import ThreadSafeBus as ThreadSafeBus -from .util import set_logging_level as set_logging_level +from .interface import Bus, detect_available_configs +from .interfaces import VALID_INTERFACES +from .io import ( + ASCReader, + ASCWriter, + BLFReader, + BLFWriter, + CanutilsLogReader, + CanutilsLogWriter, + CSVReader, + CSVWriter, + Logger, + LogReader, + MessageSync, + Printer, + SizedRotatingLogger, + SqliteReader, + SqliteWriter, + TRCFileVersion, + TRCReader, + TRCWriter, +) +from .listener import AsyncBufferedReader, BufferedReader, Listener, RedirectReader +from .message import Message +from .notifier import Notifier +from .thread_safe_bus import ThreadSafeBus +from .util import set_logging_level diff --git a/can/interfaces/ics_neovi/__init__.py b/can/interfaces/ics_neovi/__init__.py index 652715366..e221e0840 100644 --- a/can/interfaces/ics_neovi/__init__.py +++ b/can/interfaces/ics_neovi/__init__.py @@ -1,7 +1,11 @@ """ """ -from .neovi_bus import ICSApiError as ICSApiError -from .neovi_bus import ICSInitializationError as ICSInitializationError -from .neovi_bus import ICSOperationError as ICSOperationError -from .neovi_bus import NeoViBus as NeoViBus +__all__ = [ + "ICSApiError", + "ICSInitializationError", + "ICSOperationError", + "NeoViBus", +] + +from .neovi_bus import ICSApiError, ICSInitializationError, ICSOperationError, NeoViBus diff --git a/can/interfaces/ixxat/__init__.py b/can/interfaces/ixxat/__init__.py index 6d49cddbb..bc871b372 100644 --- a/can/interfaces/ixxat/__init__.py +++ b/can/interfaces/ixxat/__init__.py @@ -4,9 +4,12 @@ Copyright (C) 2016-2021 Giuseppe Corbelli """ -from can.interfaces.ixxat.canlib import IXXATBus as IXXATBus +__all__ = [ + "get_ixxat_hwids", + "IXXATBus", +] + +from can.interfaces.ixxat.canlib import IXXATBus # import this and not the one from vcinpl2 for backward compatibility -from can.interfaces.ixxat.canlib_vcinpl import ( - get_ixxat_hwids as get_ixxat_hwids, -) +from can.interfaces.ixxat.canlib_vcinpl import get_ixxat_hwids diff --git a/can/interfaces/neousys/__init__.py b/can/interfaces/neousys/__init__.py index 330e78b9d..6bd503f35 100644 --- a/can/interfaces/neousys/__init__.py +++ b/can/interfaces/neousys/__init__.py @@ -1,3 +1,5 @@ """ Neousys CAN bus driver """ -from can.interfaces.neousys.neousys import NeousysBus as NeousysBus +__all__ = ["NeousysBus"] + +from can.interfaces.neousys.neousys import NeousysBus diff --git a/can/interfaces/pcan/__init__.py b/can/interfaces/pcan/__init__.py index 40969b38b..b46ccb050 100644 --- a/can/interfaces/pcan/__init__.py +++ b/can/interfaces/pcan/__init__.py @@ -1,5 +1,9 @@ """ """ -from can.interfaces.pcan.pcan import PcanBus as PcanBus -from can.interfaces.pcan.pcan import PcanError as PcanError +__all__ = [ + "PcanBus", + "PcanError", +] + +from can.interfaces.pcan.pcan import PcanBus, PcanError diff --git a/can/interfaces/seeedstudio/__init__.py b/can/interfaces/seeedstudio/__init__.py index c2dddee84..2fc348a17 100644 --- a/can/interfaces/seeedstudio/__init__.py +++ b/can/interfaces/seeedstudio/__init__.py @@ -1,4 +1,6 @@ """ """ -from can.interfaces.seeedstudio.seeedstudio import SeeedBus as SeeedBus +__all__ = ["SeeedBus"] + +from can.interfaces.seeedstudio.seeedstudio import SeeedBus diff --git a/can/interfaces/serial/__init__.py b/can/interfaces/serial/__init__.py index a6d527e24..1b1d63c49 100644 --- a/can/interfaces/serial/__init__.py +++ b/can/interfaces/serial/__init__.py @@ -1,4 +1,6 @@ """ """ -from can.interfaces.serial.serial_can import SerialBus as SerialBus +__all__ = ["SerialBus"] + +from can.interfaces.serial.serial_can import SerialBus diff --git a/can/interfaces/socketcan/__init__.py b/can/interfaces/socketcan/__init__.py index 291535aaa..0fbdede58 100644 --- a/can/interfaces/socketcan/__init__.py +++ b/can/interfaces/socketcan/__init__.py @@ -2,6 +2,10 @@ See: https://www.kernel.org/doc/Documentation/networking/can.txt """ -from .socketcan import CyclicSendTask as CyclicSendTask -from .socketcan import MultiRateCyclicSendTask as MultiRateCyclicSendTask -from .socketcan import SocketcanBus as SocketcanBus +__all__ = [ + "CyclicSendTask", + "MultiRateCyclicSendTask", + "SocketcanBus", +] + +from .socketcan import CyclicSendTask, MultiRateCyclicSendTask, SocketcanBus diff --git a/can/interfaces/socketcand/__init__.py b/can/interfaces/socketcand/__init__.py index e03a5d6d3..e6b106918 100644 --- a/can/interfaces/socketcand/__init__.py +++ b/can/interfaces/socketcand/__init__.py @@ -6,4 +6,6 @@ http://www.domologic.de """ -from .socketcand import SocketCanDaemonBus as SocketCanDaemonBus +__all__ = ["SocketCanDaemonBus"] + +from .socketcand import SocketCanDaemonBus diff --git a/can/interfaces/systec/__init__.py b/can/interfaces/systec/__init__.py index b972db910..9a97b3054 100644 --- a/can/interfaces/systec/__init__.py +++ b/can/interfaces/systec/__init__.py @@ -1 +1,3 @@ -from can.interfaces.systec.ucanbus import UcanBus as UcanBus +__all__ = ["UcanBus"] + +from can.interfaces.systec.ucanbus import UcanBus diff --git a/can/interfaces/udp_multicast/__init__.py b/can/interfaces/udp_multicast/__init__.py index a9d87b139..6e11a02c5 100644 --- a/can/interfaces/udp_multicast/__init__.py +++ b/can/interfaces/udp_multicast/__init__.py @@ -1,3 +1,5 @@ """A module to allow CAN over UDP on IPv4/IPv6 multicast.""" -from .bus import UdpMulticastBus as UdpMulticastBus +__all__ = ["UdpMulticastBus"] + +from .bus import UdpMulticastBus diff --git a/can/interfaces/usb2can/__init__.py b/can/interfaces/usb2can/__init__.py index 16b1430e1..17f5583f3 100644 --- a/can/interfaces/usb2can/__init__.py +++ b/can/interfaces/usb2can/__init__.py @@ -1,5 +1,10 @@ """ """ -from .usb2canabstractionlayer import Usb2CanAbstractionLayer as Usb2CanAbstractionLayer -from .usb2canInterface import Usb2canBus as Usb2canBus +__all__ = [ + "Usb2CanAbstractionLayer", + "Usb2canBus", +] + +from .usb2canabstractionlayer import Usb2CanAbstractionLayer +from .usb2canInterface import Usb2canBus diff --git a/can/interfaces/vector/__init__.py b/can/interfaces/vector/__init__.py index 6769b5173..e0c34d88f 100644 --- a/can/interfaces/vector/__init__.py +++ b/can/interfaces/vector/__init__.py @@ -1,12 +1,24 @@ """ """ -from .canlib import VectorBus as VectorBus -from .canlib import VectorBusParams as VectorBusParams -from .canlib import VectorCanFdParams as VectorCanFdParams -from .canlib import VectorCanParams as VectorCanParams -from .canlib import VectorChannelConfig as VectorChannelConfig -from .canlib import get_channel_configs as get_channel_configs -from .exceptions import VectorError as VectorError -from .exceptions import VectorInitializationError as VectorInitializationError -from .exceptions import VectorOperationError as VectorOperationError +__all__ = [ + "get_channel_configs", + "VectorBus", + "VectorBusParams", + "VectorCanFdParams", + "VectorCanParams", + "VectorChannelConfig", + "VectorError", + "VectorInitializationError", + "VectorOperationError", +] + +from .canlib import ( + VectorBus, + VectorBusParams, + VectorCanFdParams, + VectorCanParams, + VectorChannelConfig, + get_channel_configs, +) +from .exceptions import VectorError, VectorInitializationError, VectorOperationError diff --git a/can/io/__init__.py b/can/io/__init__.py index 4ba47a1fc..12cebd52c 100644 --- a/can/io/__init__.py +++ b/can/io/__init__.py @@ -3,27 +3,39 @@ and Writers based off the file extension. """ +__all__ = [ + "ASCReader", + "ASCWriter", + "BaseRotatingLogger", + "BLFReader", + "BLFWriter", + "CanutilsLogReader", + "CanutilsLogWriter", + "CSVReader", + "CSVWriter", + "Logger", + "LogReader", + "MessageSync", + "Printer", + "SizedRotatingLogger", + "SqliteReader", + "SqliteWriter", + "TRCFileVersion", + "TRCReader", + "TRCWriter", +] + # Generic -from .logger import BaseRotatingLogger as BaseRotatingLogger -from .logger import Logger as Logger -from .logger import SizedRotatingLogger as SizedRotatingLogger -from .player import LogReader as LogReader -from .player import MessageSync as MessageSync +from .logger import BaseRotatingLogger, Logger, SizedRotatingLogger +from .player import LogReader, MessageSync # isort: split # Format specific -from .asc import ASCReader as ASCReader -from .asc import ASCWriter as ASCWriter -from .blf import BLFReader as BLFReader -from .blf import BLFWriter as BLFWriter -from .canutils import CanutilsLogReader as CanutilsLogReader -from .canutils import CanutilsLogWriter as CanutilsLogWriter -from .csv import CSVReader as CSVReader -from .csv import CSVWriter as CSVWriter -from .printer import Printer as Printer -from .sqlite import SqliteReader as SqliteReader -from .sqlite import SqliteWriter as SqliteWriter -from .trc import TRCFileVersion as TRCFileVersion -from .trc import TRCReader as TRCReader -from .trc import TRCWriter as TRCWriter +from .asc import ASCReader, ASCWriter +from .blf import BLFReader, BLFWriter +from .canutils import CanutilsLogReader, CanutilsLogWriter +from .csv import CSVReader, CSVWriter +from .printer import Printer +from .sqlite import SqliteReader, SqliteWriter +from .trc import TRCFileVersion, TRCReader, TRCWriter