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
# cythonize -X language_level=3 -a -i src/dbus_fast/unpack.py
message = {
"/org/bluez/hci0": {
"org.bluez.Adapter1": {

View File

@ -4,15 +4,20 @@ from .signature import Variant
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