feat: cythonize unpack_variants (#51)
This commit is contained in:
1
build.py
1
build.py
@@ -23,6 +23,7 @@ def build(setup_kwargs):
|
||||
dict(
|
||||
ext_modules=cythonize(
|
||||
[
|
||||
"src/dbus_fast/_unpack.py",
|
||||
"src/dbus_fast/_private/marshaller.py",
|
||||
"src/dbus_fast/_private/unmarshaller.py",
|
||||
]
|
||||
|
||||
@@ -27,6 +27,7 @@ from .errors import (
|
||||
)
|
||||
from .message import Message
|
||||
from .signature import SignatureTree, SignatureType, Variant
|
||||
from .unpack import unpack_variants
|
||||
from .validators import (
|
||||
assert_bus_name_valid,
|
||||
assert_interface_name_valid,
|
||||
@@ -37,3 +38,47 @@ from .validators import (
|
||||
is_member_name_valid,
|
||||
is_object_path_valid,
|
||||
)
|
||||
|
||||
__all__ = [
|
||||
"aio",
|
||||
"glib",
|
||||
"introspection",
|
||||
"message_bus",
|
||||
"proxy_object",
|
||||
"service",
|
||||
"ArgDirection",
|
||||
"BusType",
|
||||
"ErrorType",
|
||||
"MessageFlag",
|
||||
"MessageType",
|
||||
"NameFlag",
|
||||
"PropertyAccess",
|
||||
"ReleaseNameReply",
|
||||
"RequestNameReply",
|
||||
"AuthError",
|
||||
"DBusError",
|
||||
"InterfaceNotFoundError",
|
||||
"InvalidAddressError",
|
||||
"InvalidBusNameError",
|
||||
"InvalidInterfaceNameError",
|
||||
"InvalidIntrospectionError",
|
||||
"InvalidMemberNameError",
|
||||
"InvalidMessageError",
|
||||
"InvalidObjectPathError",
|
||||
"InvalidSignatureError",
|
||||
"SignalDisabledError",
|
||||
"SignatureBodyMismatchError",
|
||||
"Message",
|
||||
"SignatureTree",
|
||||
"SignatureType",
|
||||
"Variant",
|
||||
"assert_bus_name_valid",
|
||||
"assert_interface_name_valid",
|
||||
"assert_member_name_valid",
|
||||
"assert_object_path_valid",
|
||||
"is_bus_name_valid",
|
||||
"is_interface_name_valid",
|
||||
"is_member_name_valid",
|
||||
"is_object_path_valid",
|
||||
"unpack_variants",
|
||||
]
|
||||
|
||||
@@ -9,7 +9,7 @@ from ..message import Message, MessageFlag
|
||||
from ..message_bus import BaseMessageBus
|
||||
from ..proxy_object import BaseProxyInterface, BaseProxyObject
|
||||
from ..signature import Variant
|
||||
from ..signature import unpack_variants as unpack
|
||||
from ..unpack import unpack_variants as unpack
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from .message_bus import MessageBus as AioMessageBus
|
||||
|
||||
@@ -8,7 +8,7 @@ from ..message import Message
|
||||
from ..message_bus import BaseMessageBus
|
||||
from ..proxy_object import BaseProxyInterface, BaseProxyObject
|
||||
from ..signature import Variant
|
||||
from ..signature import unpack_variants as unpack
|
||||
from ..unpack import unpack_variants as unpack
|
||||
|
||||
# glib is optional
|
||||
try:
|
||||
|
||||
@@ -13,7 +13,7 @@ from ._private.util import replace_idx_with_fds
|
||||
from .constants import ErrorType, MessageType
|
||||
from .errors import DBusError, InterfaceNotFoundError
|
||||
from .message import Message
|
||||
from .signature import unpack_variants as unpack
|
||||
from .unpack import unpack_variants as unpack
|
||||
from .validators import assert_bus_name_valid, assert_object_path_valid
|
||||
|
||||
|
||||
|
||||
@@ -5,17 +5,6 @@ from .errors import InvalidSignatureError, SignatureBodyMismatchError
|
||||
from .validators import is_object_path_valid
|
||||
|
||||
|
||||
def unpack_variants(data: Any):
|
||||
"""Unpack variants and remove signature info."""
|
||||
if isinstance(data, Variant):
|
||||
return unpack_variants(data.value)
|
||||
if isinstance(data, dict):
|
||||
return {k: unpack_variants(v) for k, v in data.items()}
|
||||
if isinstance(data, list):
|
||||
return [unpack_variants(item) for item in data]
|
||||
return data
|
||||
|
||||
|
||||
class SignatureType:
|
||||
"""A class that represents a single complete type within a signature.
|
||||
|
||||
|
||||
6
src/dbus_fast/unpack.pxd
Normal file
6
src/dbus_fast/unpack.pxd
Normal file
@@ -0,0 +1,6 @@
|
||||
"""cdefs for unpack.py"""
|
||||
|
||||
import cython
|
||||
|
||||
|
||||
cpdef unpack_variants(object data)
|
||||
14
src/dbus_fast/unpack.py
Normal file
14
src/dbus_fast/unpack.py
Normal file
@@ -0,0 +1,14 @@
|
||||
from typing import Any
|
||||
|
||||
from .signature import Variant
|
||||
|
||||
|
||||
def unpack_variants(data: Any) -> Any:
|
||||
"""Unpack variants and remove signature info."""
|
||||
if isinstance(data, Variant):
|
||||
return unpack_variants(data.value)
|
||||
if isinstance(data, dict):
|
||||
return {k: unpack_variants(v) for k, v in data.items()}
|
||||
if isinstance(data, list):
|
||||
return [unpack_variants(item) for item in data]
|
||||
return data
|
||||
@@ -1,7 +1,8 @@
|
||||
"""Test unpack variants."""
|
||||
import pytest
|
||||
|
||||
from dbus_fast.signature import Variant, unpack_variants
|
||||
from dbus_fast.signature import Variant
|
||||
from dbus_fast.unpack import unpack_variants
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
|
||||
Reference in New Issue
Block a user