Skip to content

Export symbols to satisfy type checkers #1551

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Apr 1, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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 \
Expand Down
2 changes: 2 additions & 0 deletions .pylintrc
Original file line number Diff line number Diff line change
Expand Up @@ -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=no

[CLASSES]

Expand Down
115 changes: 86 additions & 29 deletions can/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,47 +6,104 @@
"""

import logging
from typing import Dict, Any
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 .listener import Listener, BufferedReader, RedirectReader, AsyncBufferedReader

from . import typechecking # isort:skip
from . import util # isort:skip
from . import broadcastmanager, interface
from .bit_timing import BitTiming, BitTimingFd
from .broadcastmanager import (
CyclicSendTaskABC,
LimitedDurationCyclicSendTaskABC,
ModifiableCyclicTaskABC,
RestartableCyclicTaskABC,
)
from .bus import BusABC, BusState
from .exceptions import (
CanError,
CanInterfaceNotImplementedError,
CanInitializationError,
CanInterfaceNotImplementedError,
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,
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
4 changes: 2 additions & 2 deletions can/bit_timing.py
Original file line number Diff line number Diff line change
@@ -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):
Expand Down
2 changes: 1 addition & 1 deletion can/broadcastmanager.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
15 changes: 7 additions & 8 deletions can/bus.py
Original file line number Diff line number Diff line change
@@ -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__)
Expand Down
1 change: 0 additions & 1 deletion can/ctypesutil.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import ctypes
import logging
import sys

from typing import Any, Callable, Optional, Tuple, Union

log = logging.getLogger("can.ctypesutil")
Expand Down
4 changes: 1 addition & 3 deletions can/exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions can/interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down
2 changes: 1 addition & 1 deletion can/interfaces/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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]] = {
Expand Down
14 changes: 7 additions & 7 deletions can/interfaces/canalystii.py
Original file line number Diff line number Diff line change
@@ -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 collections import deque
from ctypes import c_ubyte
from typing import Any, Deque, Dict, Optional, Sequence, Tuple, Union

from can import BitTiming, BusABC, Message, BitTimingFd
import canalystii as driver

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__)

Expand Down
9 changes: 5 additions & 4 deletions can/interfaces/cantact.py
Original file line number Diff line number Diff line change
Expand Up @@ -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__)

Expand Down
4 changes: 3 additions & 1 deletion can/interfaces/etas/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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 *


Expand Down Expand Up @@ -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)()
Expand Down
10 changes: 5 additions & 5 deletions can/interfaces/gs_usb.py
Original file line number Diff line number Diff line change
@@ -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__)


Expand Down
12 changes: 8 additions & 4 deletions can/interfaces/ics_neovi/__init__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
"""
"""

from .neovi_bus import NeoViBus
from .neovi_bus import ICSApiError
from .neovi_bus import ICSInitializationError
from .neovi_bus import ICSOperationError
__all__ = [
"ICSApiError",
"ICSInitializationError",
"ICSOperationError",
"NeoViBus",
]

from .neovi_bus import ICSApiError, ICSInitializationError, ICSOperationError, NeoViBus
9 changes: 5 additions & 4 deletions can/interfaces/ics_neovi/neovi_bus.py
Original file line number Diff line number Diff line change
Expand Up @@ -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__)
Expand Down
7 changes: 4 additions & 3 deletions can/interfaces/iscan.py
Original file line number Diff line number Diff line change
Expand Up @@ -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__)
Expand Down
Loading