跳转到主要内容

未提供项目描述

项目描述

dbus-objects

checks tests codecov PyPI version

在Python类型系统之上实现的DBus对象。

集成

import random

from typing import List

import dbus_objects
import dbus_objects.integration.jeepney


class ExampleObject(dbus_objects.DBusObject):
    def __init__(self):
        super().__init__(default_interface_root='io.github.ffy00.dbus_objects.example')
        self._bets = []
        self._name = 'something'

    @dbus_objects.dbus_method()
    def ping(self) -> str:
        return 'Pong!'

    @dbus_objects.dbus_method()
    def print(self, msg: str) -> None:
        print(msg)

    @dbus_objects.dbus_method()
    def sum(self, a: int, b: int) -> int:
        return a + b

    @dbus_objects.dbus_method()
    def save_bet(self, number: int) -> None:
        self._bets.append(number)

    @dbus_objects.dbus_method()
    def get_bets(self) -> List[int]:
        return self._bets

    @dbus_objects.dbus_method()
    def lotery(self) -> int:
        winner = random.choice(self._bets)
        self._bets = []
        return winner

    @dbus_objects.dbus_property()
    def name(self) -> str:
        return self._name

    @name.setter
    def name(self, value: str):
        self._name = value
        self.name_updated(value)

    name_updated = dbus_objects.dbus_signal(new_name=str)


server = dbus_objects.integration.jeepney.BlockingDBusServer(
    bus='SESSION',
    name='io.github.ffy00.dbus-objects',
)
server.register_object('/io/github/ffy00/dbus_objects/example', ExampleObject())

server.listen()

此示例将生成以下服务器拓扑

paths
├── /
│   ├── org.freedesktop.DBus.Introspectable
│   │   └── Introspect
│   └── org.freedesktop.DBus.Peer
│       └── Ping
├── /io
│   ├── org.freedesktop.DBus.Introspectable
│   │   └── Introspect
│   └── org.freedesktop.DBus.Peer
│       └── Ping
├── /io/github
│   ├── org.freedesktop.DBus.Introspectable
│   │   └── Introspect
│   └── org.freedesktop.DBus.Peer
│       └── Ping
├── /io/github/ffy00
│   ├── org.freedesktop.DBus.Introspectable
│   │   └── Introspect
│   └── org.freedesktop.DBus.Peer
│       └── Ping
├── /io/github/ffy00/dbus_objects
│   ├── org.freedesktop.DBus.Introspectable
│   │   └── Introspect
│   └── org.freedesktop.DBus.Peer
│       └── Ping
└── /io/github/ffy00/dbus_objects/example
    ├── io.github.ffy00.dbus_objects.example.ExampleObject
    │   ├── GetBets
    │   ├── Lotery
    │   ├── Ping
    │   ├── Print
    │   ├── SaveBet
    │   └── Sum
    ├── org.freedesktop.DBus.Introspectable
    │   └── Introspect
    ├── org.freedesktop.DBus.Peer
    │   └── Ping
    └── org.freedesktop.DBus.Properties
        ├── Get
        ├── GetAll
        └── Set

例如,以下为 /io/github/ffy00/dbus_objects/example 的DBus内省XML

<!DOCTYPE node PUBLIC
"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd" >
<node>
	<interface name="io.github.ffy00.dbus_objects.example.ExampleObject">
		<method name="Ping">
			<arg direction="out" type="s" />
		</method>
		<method name="Print">
			<arg direction="in" type="s" name="msg" />
		</method>
		<method name="Sum">
			<arg direction="in" type="i" name="a" />
			<arg direction="in" type="i" name="b" />
			<arg direction="out" type="i" />
		</method>
		<method name="SaveBet">
			<arg direction="in" type="i" name="number" />
		</method>
		<method name="GetBets">
			<arg direction="out" type="ai" />
		</method>
		<method name="Lotery">
			<arg direction="out" type="i" />
		</method>
		<property name="Name" type="s" access="readwrite" />
		<signal name="NameUpdated">
			<arg type="s" name="new_name" />
		</signal>
	</interface>
	<interface name="org.freedesktop.DBus.Properties">
		<method name="Get">
			<arg direction="in" type="s" name="interface_name" />
			<arg direction="in" type="s" name="property_name" />
			<arg direction="out" type="v" />
		</method>
		<method name="Set">
			<arg direction="in" type="s" name="interface_name" />
			<arg direction="in" type="s" name="property_name" />
			<arg direction="in" type="v" name="value" />
		</method>
		<method name="GetAll">
			<arg direction="in" type="s" name="interface_name" />
			<arg direction="out" type="a{sv}" />
		</method>
	</interface>
	<interface name="org.freedesktop.DBus.Peer">
		<method name="Ping" />
	</interface>
	<interface name="org.freedesktop.DBus.Introspectable">
		<method name="Introspect">
			<arg direction="out" type="s" name="xml" />
		</method>
	</interface>
</node>

许可证

MIT

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关 安装包 的更多信息。

源分布

dbus-objects-0.0.2.tar.gz (22.6 kB 查看哈希值)

上传时间

构建分布

dbus_objects-0.0.2-py3-none-any.whl (19.3 kB 查看哈希值)

上传于 Python 3

由以下提供支持