Skip to content

Commit 6d41056

Browse files
authored
Merge pull request #1465 from hardbyte/felixdivo-patch-2
Improve interface registry: Fix DeprecationWarning + better typing + more robust
2 parents 66a5d2a + e50490c commit 6d41056

File tree

1 file changed

+21
-8
lines changed

1 file changed

+21
-8
lines changed

can/interfaces/__init__.py

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
"""
44

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

88
# interface_name => (module, classname)
9-
BACKENDS: Dict[str, Tuple[str, ...]] = {
9+
BACKENDS: Dict[str, Tuple[str, str]] = {
1010
"kvaser": ("can.interfaces.kvaser", "KvaserBus"),
1111
"socketcan": ("can.interfaces.socketcan", "SocketcanBus"),
1212
"serial": ("can.interfaces.serial.serial_can", "SerialBus"),
@@ -35,18 +35,31 @@
3535
if sys.version_info >= (3, 8):
3636
from importlib.metadata import entry_points
3737

38-
entries = entry_points().get("can.interface", ())
39-
BACKENDS.update(
40-
{interface.name: tuple(interface.value.split(":")) for interface in entries}
41-
)
38+
# See https://docs.python.org/3/library/importlib.metadata.html#entry-points, "Compatibility Note".
39+
if sys.version_info >= (3, 10):
40+
BACKENDS.update(
41+
{
42+
interface.name: (interface.module, interface.attr)
43+
for interface in entry_points(group="can.interface")
44+
}
45+
)
46+
else:
47+
# The entry_points().get(...) causes a deprecation warning on Python >= 3.10.
48+
BACKENDS.update(
49+
{
50+
interface.name: cast(
51+
Tuple[str, str], tuple(interface.value.split(":", maxsplit=1))
52+
)
53+
for interface in entry_points().get("can.interface", [])
54+
}
55+
)
4256
else:
4357
from pkg_resources import iter_entry_points
4458

45-
entries = iter_entry_points("can.interface")
4659
BACKENDS.update(
4760
{
4861
interface.name: (interface.module_name, interface.attrs[0])
49-
for interface in entries
62+
for interface in iter_entry_points("can.interface")
5063
}
5164
)
5265

0 commit comments

Comments
 (0)