Skip to content

Commit 5f71dc4

Browse files
committed
Added on_unknown_member option to the properties_get_all_dict
Specifies the action on what to do with unknow property
1 parent 2a1c397 commit 5f71dc4

File tree

4 files changed

+42
-6
lines changed

4 files changed

+42
-6
lines changed

docs/asyncio_api.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,9 @@ Classes
6464
interface but the member names are automatically translated to python
6565
names. (internally calls it for each interface used in class definition)
6666

67+
:param str on_unknown_member: If an unknown D-Bus property was encountered
68+
either raise an ``"error"`` (default), ``"ignore"`` the property
69+
or ``"reuse"`` the D-Bus name for the member.
6770
:return: dictionary of properties
6871
:rtype: Dict[str, Any]
6972

docs/sync_api.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,9 @@ Classes
6868
interface but the member names are automatically translated to python
6969
names. (internally calls it for each interface used in class definition)
7070

71+
:param str on_unknown_member: If an unknown D-Bus property was encountered
72+
either raise an ``"error"`` (default), ``"ignore"`` the property
73+
or ``"reuse"`` the D-Bus name for the member.
7174
:return: dictionary of properties
7275
:rtype: Dict[str, Any]
7376

src/sdbus/dbus_proxy_async_interfaces.py

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
from __future__ import annotations
2121

2222
from inspect import getmembers
23-
from typing import Any, Dict, List, Optional, Tuple
23+
from typing import Any, Dict, List, Literal, Optional, Tuple
2424

2525
from .dbus_common_funcs import get_default_bus
2626
from .dbus_proxy_async_interface_base import DbusInterfaceBaseAsync
@@ -87,14 +87,30 @@ async def _properties_get_all(
8787
self, interface_name: str) -> Dict[str, Tuple[str, Any]]:
8888
raise NotImplementedError
8989

90-
async def properties_get_all_dict(self) -> Dict[str, Any]:
90+
async def properties_get_all_dict(
91+
self,
92+
on_unknown_member: Literal['error', 'ignore', 'reuse'] = 'error',
93+
) -> Dict[str, Any]:
94+
9195
properties: Dict[str, Any] = {}
9296

9397
for interface_name in self._dbus_served_interfaces_names:
9498
dbus_properties_data = await self._properties_get_all(
9599
interface_name)
100+
96101
for member_name, variant in dbus_properties_data.items():
97-
python_name = self._dbus_to_python_name_map[member_name]
102+
try:
103+
python_name = self._dbus_to_python_name_map[member_name]
104+
except KeyError:
105+
if on_unknown_member == 'error':
106+
raise
107+
elif on_unknown_member == 'ignore':
108+
continue
109+
elif on_unknown_member == 'reuse':
110+
python_name = member_name
111+
else:
112+
raise ValueError
113+
98114
properties[python_name] = variant[1]
99115

100116
return properties

src/sdbus/dbus_proxy_sync_interfaces.py

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
2020
from __future__ import annotations
2121

22-
from typing import Any, Dict, Tuple
22+
from typing import Any, Dict, Literal, Tuple
2323

2424
from .dbus_proxy_sync_interface_base import DbusInterfaceBase
2525
from .dbus_proxy_sync_method import dbus_method
@@ -61,14 +61,28 @@ def _properties_get_all(
6161
self, interface_name: str) -> Dict[str, Tuple[str, Any]]:
6262
raise NotImplementedError
6363

64-
def properties_get_all_dict(self) -> Dict[str, Any]:
64+
def properties_get_all_dict(
65+
self,
66+
on_unknown_member: Literal['error', 'ignore', 'reuse'] = 'error',
67+
) -> Dict[str, Any]:
6568
properties: Dict[str, Any] = {}
6669

6770
for interface_name in self._dbus_served_interfaces_names:
6871
dbus_properties_data = self._properties_get_all(
6972
interface_name)
7073
for member_name, variant in dbus_properties_data.items():
71-
python_name = self._dbus_to_python_name_map[member_name]
74+
try:
75+
python_name = self._dbus_to_python_name_map[member_name]
76+
except KeyError:
77+
if on_unknown_member == 'error':
78+
raise
79+
elif on_unknown_member == 'ignore':
80+
continue
81+
elif on_unknown_member == 'reuse':
82+
python_name = member_name
83+
else:
84+
raise ValueError
85+
7286
properties[python_name] = variant[1]
7387

7488
return properties

0 commit comments

Comments
 (0)