From c4847ad10dcc2aa168590db09a158c394e6c2788 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Wed, 11 Nov 2020 13:09:13 +0100 Subject: [PATCH] Handle dbus single byte (#2237) --- supervisor/dbus/network/accesspoint.py | 2 +- supervisor/host/network.py | 2 +- supervisor/utils/gdbus.py | 6 ++--- ...ktop_NetworkManager_AccessPoint_43099.json | 2 +- ...ktop_NetworkManager_AccessPoint_43100.json | 2 +- tests/utils/test_gvariant_parser.py | 22 +++++++++++++++++++ 6 files changed, 29 insertions(+), 7 deletions(-) diff --git a/supervisor/dbus/network/accesspoint.py b/supervisor/dbus/network/accesspoint.py index b60ea7727..3e1338929 100644 --- a/supervisor/dbus/network/accesspoint.py +++ b/supervisor/dbus/network/accesspoint.py @@ -44,7 +44,7 @@ class NetworkWirelessAP(DBusInterfaceProxy): @property def strength(self) -> int: """Return details about mac address.""" - return int(self.properties[DBUS_ATTR_STRENGTH]) + return int(self.properties[DBUS_ATTR_STRENGTH][0]) async def connect(self) -> None: """Get connection information.""" diff --git a/supervisor/host/network.py b/supervisor/host/network.py index bfbf34e6f..ab88be0a3 100644 --- a/supervisor/host/network.py +++ b/supervisor/host/network.py @@ -150,7 +150,7 @@ class NetworkManager(CoreSysAttributes): try: await accesspoint.connect() except DBusError as err: - _LOGGER.waring("Can't process an AP: %s", err) + _LOGGER.warning("Can't process an AP: %s", err) continue else: accesspoints.append( diff --git a/supervisor/utils/gdbus.py b/supervisor/utils/gdbus.py index 643571cc3..6a27fc3e2 100644 --- a/supervisor/utils/gdbus.py +++ b/supervisor/utils/gdbus.py @@ -34,7 +34,7 @@ RE_GVARIANT_STRING: re.Pattern[Any] = re.compile( r"(?<=(?: |{|\[|\(|<))'(.*?)'(?=(?:|]|}|,|\)|>))" ) RE_GVARIANT_BINARY: re.Pattern[Any] = re.compile( - r"\"[^\"\\]*(?:\\.[^\"\\]*)*\"|\[byte (.*?)\]|\[(0x[0-9A-Za-z]{2}.*?)\]" + r"\"[^\"\\]*(?:\\.[^\"\\]*)*\"|\[byte (.*?)\]|\[(0x[0-9A-Za-z]{2}.*?)\]|" ) RE_GVARIANT_BINARY_STRING: re.Pattern[Any] = re.compile( r"\"[^\"\\]*(?:\\.[^\"\\]*)*\"|?" @@ -143,8 +143,8 @@ class DBus: # Handle Bytes json_raw = RE_GVARIANT_BINARY.sub( lambda x: x.group(0) - if not (x.group(1) or x.group(2)) - else _convert_bytes(x.group(1) or x.group(2)), + if not (x.group(1) or x.group(2) or x.group(3)) + else _convert_bytes(x.group(1) or x.group(2) or x.group(3)), json_raw, ) json_raw = RE_GVARIANT_BINARY_STRING.sub( diff --git a/tests/fixtures/org_freedesktop_NetworkManager_AccessPoint_43099.json b/tests/fixtures/org_freedesktop_NetworkManager_AccessPoint_43099.json index 5f738e36e..7b4e7b6b1 100644 --- a/tests/fixtures/org_freedesktop_NetworkManager_AccessPoint_43099.json +++ b/tests/fixtures/org_freedesktop_NetworkManager_AccessPoint_43099.json @@ -7,6 +7,6 @@ "HwAddress": "E4:57:40:A9:D7:DE", "Mode": 2, "MaxBitrate": 195000, - "Strength": 47, + "Strength": [47], "LastSeen": 1398776 } diff --git a/tests/fixtures/org_freedesktop_NetworkManager_AccessPoint_43100.json b/tests/fixtures/org_freedesktop_NetworkManager_AccessPoint_43100.json index 161c3edfb..15e1efdf6 100644 --- a/tests/fixtures/org_freedesktop_NetworkManager_AccessPoint_43100.json +++ b/tests/fixtures/org_freedesktop_NetworkManager_AccessPoint_43100.json @@ -7,6 +7,6 @@ "HwAddress": "18:4B:0D:23:A1:9C", "Mode": 2, "MaxBitrate": 540000, - "Strength": 63, + "Strength": [63], "LastSeen": 1398839 } diff --git a/tests/utils/test_gvariant_parser.py b/tests/utils/test_gvariant_parser.py index 3b1ac4a8c..3d705114f 100644 --- a/tests/utils/test_gvariant_parser.py +++ b/tests/utils/test_gvariant_parser.py @@ -473,3 +473,25 @@ def test_v6(): ], } ] + + +def test_single_byte(): + """Test a singlebyte response.""" + raw = "({'Flags': , 'WpaFlags': , 'RsnFlags': , 'Ssid': <[byte 0x53, 0x59, 0x53, 0x48, 0x41, 0x43, 0x4b, 0x5f, 0x48, 0x6f, 0x6d, 0x65]>, 'Frequency': , 'HwAddress': <'18:4B:0D:A3:A1:9C'>, 'Mode': , 'MaxBitrate': , 'Strength': , 'LastSeen': <1646569>},)" + + data = DBus.parse_gvariant(raw) + + assert data == [ + { + "Flags": 1, + "Frequency": 5660, + "HwAddress": "18:4B:0D:A3:A1:9C", + "LastSeen": 1646569, + "MaxBitrate": 540000, + "Mode": 2, + "RsnFlags": 392, + "Ssid": [83, 89, 83, 72, 65, 67, 75, 95, 72, 111, 109, 101], + "Strength": [44], + "WpaFlags": 0, + } + ]