Skip to content

Commit

Permalink
feat: speed up unpack_variants (#105)
Browse files Browse the repository at this point in the history
  • Loading branch information
bdraco authored Oct 12, 2022
1 parent 9658f62 commit a4fdda2
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 4 deletions.
3 changes: 3 additions & 0 deletions bench/unpack_variants.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

from dbus_fast import Variant, unpack_variants

# cythonize -X language_level=3 -a -i src/dbus_fast/unpack.py


message = {
"/org/bluez/hci0": {
"org.bluez.Adapter1": {
Expand Down
13 changes: 9 additions & 4 deletions src/dbus_fast/unpack.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,20 @@


def unpack_variants(data: Any) -> Any:
"""Unpack variants and remove signature info."""
"""Unpack variants and remove signature info.
This function should only be used to unpack
unmarshalled data as the checks are not
idiomatic.
"""
return _unpack_variants(data)


def _unpack_variants(data: Any) -> Any:
if isinstance(data, dict):
if type(data) is dict:
return {k: _unpack_variants(v) for k, v in data.items()}
if isinstance(data, list):
if type(data) is list:
return [_unpack_variants(item) for item in data]
if isinstance(data, Variant):
if type(data) is Variant:
return _unpack_variants(data.value)
return data

0 comments on commit a4fdda2

Please sign in to comment.