feat: cythonize unpack_variants (#51)

This commit is contained in:
J. Nick Koston
2022-10-02 09:37:27 -10:00
committed by GitHub
parent f6e4c3c8ae
commit 158721123f
9 changed files with 71 additions and 15 deletions

View File

@@ -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",
]

View File

@@ -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",
]

View File

@@ -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

View File

@@ -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:

View File

@@ -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

View File

@@ -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
View File

@@ -0,0 +1,6 @@
"""cdefs for unpack.py"""
import cython
cpdef unpack_variants(object data)

14
src/dbus_fast/unpack.py Normal file
View 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

View File

@@ -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