feat: speed up unpack_variants (#105)

This commit is contained in:
J. Nick Koston 2022-10-11 22:03:38 -10:00 committed by GitHub
parent 9658f62d4c
commit a4fdda271f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 4 deletions

View File

@ -2,6 +2,9 @@ import timeit
from dbus_fast import Variant, unpack_variants from dbus_fast import Variant, unpack_variants
# cythonize -X language_level=3 -a -i src/dbus_fast/unpack.py
message = { message = {
"/org/bluez/hci0": { "/org/bluez/hci0": {
"org.bluez.Adapter1": { "org.bluez.Adapter1": {

View File

@ -4,15 +4,20 @@ from .signature import Variant
def unpack_variants(data: Any) -> Any: 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) return _unpack_variants(data)
def _unpack_variants(data: Any) -> Any: 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()} 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] return [_unpack_variants(item) for item in data]
if isinstance(data, Variant): if type(data) is Variant:
return _unpack_variants(data.value) return _unpack_variants(data.value)
return data return data