feat: speed up unpack_variants (#105)
This commit is contained in:
parent
9658f62d4c
commit
a4fdda271f
@ -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": {
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user