Closed
Description
When trying to access an async property of an interface, both mypy and pyright report the wrong type. In this example, I'd expect access_point.ssid
to report type bytes
, but it doesn't. Also, if I call get_async()
directly it reports a different type for pyright.
import sdbus
import sdbus_async.networkmanager as nm
from typing import reveal_type
system_bus = sdbus.sd_bus_open_system()
async def get_wifi_connections(wifi_device: nm.NetworkDeviceWireless):
for path in await wifi_device.get_all_access_points():
access_point = nm.AccessPoint(path, system_bus)
ssid = await access_point.ssid
reveal_type(ssid)
ssid = await access_point.ssid.get_async()
reveal_type(ssid)
mypy output:
$ mypy type_test_async.py
type_test_async.py:10: error: Need type annotation for "ssid" [var-annotated]
type_test_async.py:11: note: Revealed type is "Any"
type_test_async.py:13: note: Revealed type is "Any"
Found 1 error in 1 file (checked 1 source file)
pyright output:
$ pyright type_test_async.py
./type_test_async.py
./type_test_async.py:11:21 - information: Type of "ssid" is "T@__await__"
./type_test_async.py:13:21 - information: Type of "ssid" is "Unknown"
0 errors, 0 warnings, 2 informations
In both cases, I would expect for the revealed type to be bytes
. At runtime, my code works and reveal_type
prints Runtime type is 'bytes'
, so I guess the problem has to do with the type hints. Also, the blocking API doesn't have this problem and correctly report bytes
.
import sdbus
import sdbus_block.networkmanager as nm_block
from typing import reveal_type
system_bus = sdbus.sd_bus_open_system()
def get_wifi_block_connections(wifi_device: nm_block.NetworkDeviceWireless):
for path in wifi_device.access_points:
access_point = nm_block.AccessPoint(path, system_bus)
ssid = access_point.ssid
reveal_type(ssid) # Both mypy and pyright report `bytes`
I'm using:
- mypy 1.8.0
- pyright 1.1.350
- python 3.11.7
Metadata
Metadata
Assignees
Labels
No labels