Skip to content

Commit 1188c57

Browse files
authored
Export symbols to satisfy type checkers (hardbyte#1551)
* use ruff with isort, export symbols according to PEP484 * fix CI * fix CI * use __all__
1 parent 7855da1 commit 1188c57

File tree

111 files changed

+567
-415
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

111 files changed

+567
-415
lines changed

.github/workflows/ci.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,9 @@ jobs:
9595
- name: mypy 3.11
9696
run: |
9797
mypy --python-version 3.11 .
98+
- name: ruff
99+
run: |
100+
ruff check can
98101
- name: pylint
99102
run: |
100103
pylint --rcfile=.pylintrc \

.pylintrc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -438,6 +438,8 @@ known-standard-library=
438438
# Force import order to recognize a module as part of a third party library.
439439
known-third-party=enchant
440440

441+
# Allow explicit reexports by alias from a package __init__
442+
allow-reexport-from-package=no
441443

442444
[CLASSES]
443445

can/__init__.py

Lines changed: 86 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -6,47 +6,104 @@
66
"""
77

88
import logging
9-
from typing import Dict, Any
9+
from typing import Any, Dict
1010

1111
__version__ = "4.1.0"
12+
__all__ = [
13+
"ASCReader",
14+
"ASCWriter",
15+
"AsyncBufferedReader",
16+
"BitTiming",
17+
"BitTimingFd",
18+
"BLFReader",
19+
"BLFWriter",
20+
"broadcastmanager",
21+
"BufferedReader",
22+
"Bus",
23+
"BusABC",
24+
"BusState",
25+
"CanError",
26+
"CanInitializationError",
27+
"CanInterfaceNotImplementedError",
28+
"CanOperationError",
29+
"CanTimeoutError",
30+
"CanutilsLogReader",
31+
"CanutilsLogWriter",
32+
"CSVReader",
33+
"CSVWriter",
34+
"CyclicSendTaskABC",
35+
"detect_available_configs",
36+
"interface",
37+
"LimitedDurationCyclicSendTaskABC",
38+
"Listener",
39+
"Logger",
40+
"LogReader",
41+
"ModifiableCyclicTaskABC",
42+
"Message",
43+
"MessageSync",
44+
"Notifier",
45+
"Printer",
46+
"RedirectReader",
47+
"RestartableCyclicTaskABC",
48+
"set_logging_level",
49+
"SizedRotatingLogger",
50+
"SqliteReader",
51+
"SqliteWriter",
52+
"ThreadSafeBus",
53+
"typechecking",
54+
"TRCFileVersion",
55+
"TRCReader",
56+
"TRCWriter",
57+
"util",
58+
"VALID_INTERFACES",
59+
]
1260

1361
log = logging.getLogger("can")
1462

1563
rc: Dict[str, Any] = {}
1664

17-
from .listener import Listener, BufferedReader, RedirectReader, AsyncBufferedReader
18-
65+
from . import typechecking # isort:skip
66+
from . import util # isort:skip
67+
from . import broadcastmanager, interface
68+
from .bit_timing import BitTiming, BitTimingFd
69+
from .broadcastmanager import (
70+
CyclicSendTaskABC,
71+
LimitedDurationCyclicSendTaskABC,
72+
ModifiableCyclicTaskABC,
73+
RestartableCyclicTaskABC,
74+
)
75+
from .bus import BusABC, BusState
1976
from .exceptions import (
2077
CanError,
21-
CanInterfaceNotImplementedError,
2278
CanInitializationError,
79+
CanInterfaceNotImplementedError,
2380
CanOperationError,
2481
CanTimeoutError,
2582
)
26-
27-
from .util import set_logging_level
28-
29-
from .message import Message
30-
from .bus import BusABC, BusState
31-
from .thread_safe_bus import ThreadSafeBus
32-
from .notifier import Notifier
33-
from .interfaces import VALID_INTERFACES
34-
from . import interface
3583
from .interface import Bus, detect_available_configs
36-
from .bit_timing import BitTiming, BitTimingFd
37-
38-
from .io import Logger, SizedRotatingLogger, Printer, LogReader, MessageSync
39-
from .io import ASCWriter, ASCReader
40-
from .io import BLFReader, BLFWriter
41-
from .io import CanutilsLogReader, CanutilsLogWriter
42-
from .io import CSVWriter, CSVReader
43-
from .io import SqliteWriter, SqliteReader
44-
from .io import TRCReader, TRCWriter, TRCFileVersion
45-
46-
from .broadcastmanager import (
47-
CyclicSendTaskABC,
48-
LimitedDurationCyclicSendTaskABC,
49-
ModifiableCyclicTaskABC,
50-
MultiRateCyclicSendTaskABC,
51-
RestartableCyclicTaskABC,
84+
from .interfaces import VALID_INTERFACES
85+
from .io import (
86+
ASCReader,
87+
ASCWriter,
88+
BLFReader,
89+
BLFWriter,
90+
CanutilsLogReader,
91+
CanutilsLogWriter,
92+
CSVReader,
93+
CSVWriter,
94+
Logger,
95+
LogReader,
96+
MessageSync,
97+
Printer,
98+
SizedRotatingLogger,
99+
SqliteReader,
100+
SqliteWriter,
101+
TRCFileVersion,
102+
TRCReader,
103+
TRCWriter,
52104
)
105+
from .listener import AsyncBufferedReader, BufferedReader, Listener, RedirectReader
106+
from .message import Message
107+
from .notifier import Notifier
108+
from .thread_safe_bus import ThreadSafeBus
109+
from .util import set_logging_level

can/bit_timing.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# pylint: disable=too-many-lines
22
import math
3-
from typing import List, Mapping, Iterator, cast
3+
from typing import Iterator, List, Mapping, cast
44

5-
from can.typechecking import BitTimingFdDict, BitTimingDict
5+
from can.typechecking import BitTimingDict, BitTimingFdDict
66

77

88
class BitTiming(Mapping):

can/broadcastmanager.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import sys
1111
import threading
1212
import time
13-
from typing import Optional, Sequence, Tuple, Union, Callable, TYPE_CHECKING
13+
from typing import TYPE_CHECKING, Callable, Optional, Sequence, Tuple, Union
1414

1515
from typing_extensions import Final
1616

can/bus.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
11
"""
22
Contains the ABC bus implementation and its documentation.
33
"""
4-
import contextlib
5-
from typing import cast, Any, Iterator, List, Optional, Sequence, Tuple, Union
6-
7-
import can.typechecking
84

9-
from abc import ABC, ABCMeta, abstractmethod
10-
import can
5+
import contextlib
116
import logging
127
import threading
13-
from time import time
8+
from abc import ABC, ABCMeta, abstractmethod
149
from enum import Enum, auto
10+
from time import time
11+
from typing import Any, Iterator, List, Optional, Sequence, Tuple, Union, cast
1512

16-
from can.broadcastmanager import ThreadBasedCyclicSendTask, CyclicSendTaskABC
13+
import can
14+
import can.typechecking
15+
from can.broadcastmanager import CyclicSendTaskABC, ThreadBasedCyclicSendTask
1716
from can.message import Message
1817

1918
LOG = logging.getLogger(__name__)

can/ctypesutil.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import ctypes
66
import logging
77
import sys
8-
98
from typing import Any, Callable, Optional, Tuple, Union
109

1110
log = logging.getLogger("can.ctypesutil")

can/exceptions.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,7 @@
1717

1818
import sys
1919
from contextlib import contextmanager
20-
21-
from typing import Optional
22-
from typing import Type
20+
from typing import Optional, Type
2321

2422
if sys.version_info >= (3, 9):
2523
from collections.abc import Generator

can/interface.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@
66

77
import importlib
88
import logging
9-
from typing import Any, cast, Iterable, Type, Optional, Union, List
9+
from typing import Any, Iterable, List, Optional, Type, Union, cast
1010

1111
from . import util
1212
from .bus import BusABC
13-
from .interfaces import BACKENDS
1413
from .exceptions import CanInterfaceNotImplementedError
14+
from .interfaces import BACKENDS
1515
from .typechecking import AutoDetectedConfig, Channel
1616

1717
log = logging.getLogger("can.interface")

can/interfaces/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"""
44

55
import sys
6-
from typing import cast, Dict, Tuple
6+
from typing import Dict, Tuple, cast
77

88
# interface_name => (module, classname)
99
BACKENDS: Dict[str, Tuple[str, str]] = {

can/interfaces/canalystii.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
from collections import deque
2-
from ctypes import c_ubyte
31
import logging
42
import time
5-
from typing import Any, Dict, Optional, Deque, Sequence, Tuple, Union
3+
from collections import deque
4+
from ctypes import c_ubyte
5+
from typing import Any, Deque, Dict, Optional, Sequence, Tuple, Union
66

7-
from can import BitTiming, BusABC, Message, BitTimingFd
7+
import canalystii as driver
8+
9+
from can import BitTiming, BitTimingFd, BusABC, Message
810
from can.exceptions import CanTimeoutError
911
from can.typechecking import CanFilters
10-
from can.util import deprecated_args_alias, check_or_adjust_timing_clock
11-
12-
import canalystii as driver
12+
from can.util import check_or_adjust_timing_clock, deprecated_args_alias
1313

1414
logger = logging.getLogger(__name__)
1515

can/interfaces/cantact.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,19 @@
22
Interface for CANtact devices from Linklayer Labs
33
"""
44

5-
import time
65
import logging
7-
from typing import Optional, Union, Any
6+
import time
7+
from typing import Any, Optional, Union
88
from unittest.mock import Mock
99

10-
from can import BusABC, Message, BitTiming, BitTimingFd
10+
from can import BitTiming, BitTimingFd, BusABC, Message
11+
1112
from ..exceptions import (
1213
CanInitializationError,
1314
CanInterfaceNotImplementedError,
1415
error_check,
1516
)
16-
from ..util import deprecated_args_alias, check_or_adjust_timing_clock
17+
from ..util import check_or_adjust_timing_clock, deprecated_args_alias
1718

1819
logger = logging.getLogger(__name__)
1920

can/interfaces/etas/__init__.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
from typing import Dict, List, Optional, Tuple
44

55
import can
6-
from ...exceptions import CanInitializationError
6+
from can.exceptions import CanInitializationError
7+
78
from .boa import *
89

910

@@ -290,6 +291,7 @@ def state(self, new_state: can.BusState) -> None:
290291
# raise CanOperationError(f"OCI_AdaptCANConfiguration failed with error 0x{ec:X}")
291292
raise NotImplementedError("Setting state is not implemented.")
292293

294+
@staticmethod
293295
def _detect_available_configs() -> List[can.typechecking.AutoDetectedConfig]:
294296
nodeRange = CSI_NodeRange(CSI_NODE_MIN, CSI_NODE_MAX)
295297
tree = ctypes.POINTER(CSI_Tree)()

can/interfaces/gs_usb.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1+
import logging
12
from typing import Optional, Tuple
23

4+
import usb
5+
from gs_usb.constants import CAN_EFF_FLAG, CAN_ERR_FLAG, CAN_MAX_DLC, CAN_RTR_FLAG
36
from gs_usb.gs_usb import GsUsb
4-
from gs_usb.gs_usb_frame import GsUsbFrame, GS_USB_NONE_ECHO_ID
5-
from gs_usb.constants import CAN_ERR_FLAG, CAN_RTR_FLAG, CAN_EFF_FLAG, CAN_MAX_DLC
7+
from gs_usb.gs_usb_frame import GS_USB_NONE_ECHO_ID, GsUsbFrame
8+
69
import can
7-
import usb
8-
import logging
910

1011
from ..exceptions import CanInitializationError, CanOperationError
1112

12-
1313
logger = logging.getLogger(__name__)
1414

1515

can/interfaces/ics_neovi/__init__.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
"""
22
"""
33

4-
from .neovi_bus import NeoViBus
5-
from .neovi_bus import ICSApiError
6-
from .neovi_bus import ICSInitializationError
7-
from .neovi_bus import ICSOperationError
4+
__all__ = [
5+
"ICSApiError",
6+
"ICSInitializationError",
7+
"ICSOperationError",
8+
"NeoViBus",
9+
]
10+
11+
from .neovi_bus import ICSApiError, ICSInitializationError, ICSOperationError, NeoViBus

can/interfaces/ics_neovi/neovi_bus.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,18 @@
1111
import logging
1212
import os
1313
import tempfile
14-
from collections import deque, defaultdict, Counter
14+
from collections import Counter, defaultdict, deque
1515
from itertools import cycle
1616
from threading import Event
1717
from warnings import warn
1818

19-
from can import Message, BusABC
19+
from can import BusABC, Message
20+
2021
from ...exceptions import (
2122
CanError,
22-
CanTimeoutError,
23-
CanOperationError,
2423
CanInitializationError,
24+
CanOperationError,
25+
CanTimeoutError,
2526
)
2627

2728
logger = logging.getLogger(__name__)

can/interfaces/iscan.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,17 @@
33
"""
44

55
import ctypes
6-
import time
76
import logging
7+
import time
88
from typing import Optional, Tuple, Union
99

10-
from can import BusABC, Message
1110
from can import (
11+
BusABC,
1212
CanError,
13-
CanInterfaceNotImplementedError,
1413
CanInitializationError,
14+
CanInterfaceNotImplementedError,
1515
CanOperationError,
16+
Message,
1617
)
1718

1819
logger = logging.getLogger(__name__)

0 commit comments

Comments
 (0)