跳转到主要内容

dbus-next的更快版本

项目描述

dbus-fast

CI Status Documentation Status Test coverage percentage

Poetry black pre-commit

PyPI Version Supported Python versions License

这是一个从优秀的DBus next库(❤️)发展而来的dbus-next的更快版本。

安装

通过pip(或您喜欢的包管理器)安装此软件

pip安装dbus-fast

文档

dbus-fast是一个针对DBus的Python库,旨在成为一个性能出色、功能齐全的高级库,主要用于将应用程序集成到Linux桌面和移动环境中。

桌面应用程序开发人员可以使用此库通过实现常见的DBus标准接口或创建自定义插件接口,将他们的应用程序集成到桌面环境中。

桌面用户可以使用此库创建自己的脚本和实用程序,以与这些接口交互,从而定制他们的桌面环境。

dbus-fast计划在以下方面改进其他Python DBus库:

  • 零依赖和纯Python 3
  • 可选的cython扩展可用于加速(反)序列化
  • 专注于性能
  • 支持包括asyncio和GLib主循环在内的多个IO后端。
  • 非阻塞IO,适合GUI开发。
  • 针对Python的最新语言特性,以实现美观的服务和客户端。
  • 完全实现DBus类型系统,无需猜测类型。
  • 对库的所有功能进行集成测试。
  • 完整文档化的公共API。

安装

此库可在PyPi上找到,名称为dbus-fast

pip3 install dbus-fast

客户端接口

要使用总线上的服务,库将构建一个代理对象,您可以使用它来调用方法、获取和设置属性,并监听信号。

更多信息,请参阅高级客户端概述

以下示例连接到媒体播放器,并使用MPRIS DBus接口控制它。

from dbus_fast.aio import MessageBus

import asyncio


async def main():
    bus = await MessageBus().connect()
    # the introspection xml would normally be included in your project, but
    # this is convenient for development
    introspection = await bus.introspect('org.mpris.MediaPlayer2.vlc', '/org/mpris/MediaPlayer2')

    obj = bus.get_proxy_object('org.mpris.MediaPlayer2.vlc', '/org/mpris/MediaPlayer2', introspection)
    player = obj.get_interface('org.mpris.MediaPlayer2.Player')
    properties = obj.get_interface('org.freedesktop.DBus.Properties')

    # call methods on the interface (this causes the media player to play)
    await player.call_play()

    volume = await player.get_volume()
    print(f'current volume: {volume}, setting to 0.5')

    await player.set_volume(0.5)

    # listen to signals
    def on_properties_changed(interface_name, changed_properties, invalidated_properties):
        for changed, variant in changed_properties.items():
            print(f'property changed: {changed} - {variant.value}')

    properties.on_properties_changed(on_properties_changed)

    await asyncio.Event().wait()

asyncio.run(main())

服务接口

要定义总线上的服务,请使用ServiceInterface类,并使用装饰器修饰类方法,以指定DBus方法、属性和信号及其类型签名。

更多信息,请参阅高级服务概述

from dbus_fast.service import ServiceInterface, method, dbus_property, signal, Variant
from dbus_fast.aio MessageBus

import asyncio

class ExampleInterface(ServiceInterface):
    def __init__(self, name):
        super().__init__(name)
        self._string_prop = 'kevin'

    @method()
    def Echo(self, what: 's') -> 's':
        return what

    @method()
    def GetVariantDict() -> 'a{sv}':
        return {
            'foo': Variant('s', 'bar'),
            'bat': Variant('x', -55),
            'a_list': Variant('as', ['hello', 'world'])
        }

    @dbus_property()
    def string_prop(self) -> 's':
        return self._string_prop

    @string_prop.setter
    def string_prop_setter(self, val: 's'):
        self._string_prop = val

    @signal()
    def signal_simple(self) -> 's':
        return 'hello'

async def main():
    bus = await MessageBus().connect()
    interface = ExampleInterface('test.interface')
    bus.export('/test/path', interface)
    # now that we are ready to handle requests, we can request name from D-Bus
    await bus.request_name('test.name')
    # wait indefinitely
    await asyncio.Event().wait()

asyncio.run(main())

低级接口

低级接口直接与DBus消息一起工作。

更多信息,请参阅低级接口概述

from dbus_fast.message import Message, MessageType
from dbus_fast.aio import MessageBus

import asyncio
import json


async def main():
    bus = await MessageBus().connect()

    reply = await bus.call(
        Message(destination='org.freedesktop.DBus',
                path='/org/freedesktop/DBus',
                interface='org.freedesktop.DBus',
                member='ListNames'))

    if reply.message_type == MessageType.ERROR:
        raise Exception(reply.body[0])

    print(json.dumps(reply.body[0], indent=2))


asyncio.run(main())

使用python-dbus-fast的项目

贡献

欢迎贡献。开发在Github上进行。

提交之前,运行pre-commit run --all-files以运行代码检查器、代码格式化和测试套件。

版权

您可以在MIT许可证下使用此代码(见LICENSE)。

  • © 2019, Tony Crisci
  • © 2022, Bluetooth Devices作者

贡献者✨

感谢这些出色的人们(emoji键

本项目遵循all-contributors规范。欢迎所有类型的贡献!

致谢

此包是用Cookiecutterbrowniebroke/cookiecutter-pypackage项目模板创建的。

项目详情


发布历史 发布通知 | RSS源

下载文件

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

源分发

dbus_fast-2.24.2.tar.gz (69.7 kB 查看哈希值)

上传时间

构建分发

dbus_fast-2.24.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux_2_5_x86_64.manylinux1_x86_64.manylinux2014_x86_64.whl (1.8 MB 查看哈希值)

上传时间 PyPy manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

dbus_fast-2.24.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB 查看哈希值)

上传时间 PyPy manylinux: glibc 2.17+ ARM64

dbus_fast-2.24.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux_2_5_x86_64.manylinux1_x86_64.manylinux2014_x86_64.whl (1.8 MB 查看哈希值)

上传时间 PyPy manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

dbus_fast-2.24.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB 查看哈希值)

上传时间 PyPy manylinux: glibc 2.17+ ARM64

dbus_fast-2.24.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux_2_5_x86_64.manylinux1_x86_64.manylinux2014_x86_64.whl (1.8 MB 查看哈希值)

上传时间 PyPy manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

dbus_fast-2.24.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB 查看哈希值)

上传时间 PyPy manylinux: glibc 2.17+ ARM64

dbus_fast-2.24.2-cp313-cp313-musllinux_1_2_x86_64.whl (5.6 MB 查看哈希值)

上传时间 CPython 3.13 musllinux: musl 1.2+ x86-64

dbus_fast-2.24.2-cp313-cp313-musllinux_1_2_aarch64.whl (5.3 MB 查看哈希值)

上传时间: CPython 3.13 musllinux: musl 1.2+ ARM64

dbus_fast-2.24.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.5 MB 查看哈希值)

上传时间: CPython 3.13 manylinux: glibc 2.17+ x86-64

dbus_fast-2.24.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (5.4 MB 查看哈希值)

上传时间: CPython 3.13 manylinux: glibc 2.17+ ARM64

dbus_fast-2.24.2-cp312-cp312-musllinux_1_2_x86_64.whl (5.6 MB 查看哈希值)

上传时间: CPython 3.12 musllinux: musl 1.2+ x86-64

dbus_fast-2.24.2-cp312-cp312-musllinux_1_2_aarch64.whl (5.4 MB 查看哈希值)

上传时间: CPython 3.12 musllinux: musl 1.2+ ARM64

dbus_fast-2.24.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.5 MB 查看哈希值)

上传时间: CPython 3.12 manylinux: glibc 2.17+ x86-64

dbus_fast-2.24.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (5.4 MB 查看哈希值)

上传时间: CPython 3.12 manylinux: glibc 2.17+ ARM64

dbus_fast-2.24.2-cp311-cp311-musllinux_1_2_x86_64.whl (5.5 MB 查看哈希值)

上传时间: CPython 3.11 musllinux: musl 1.2+ x86-64

dbus_fast-2.24.2-cp311-cp311-musllinux_1_2_aarch64.whl (5.4 MB 查看哈希值)

上传时间: CPython 3.11 musllinux: musl 1.2+ ARM64

dbus_fast-2.24.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.4 MB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ x86-64

dbus_fast-2.24.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (5.4 MB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ ARM64

dbus_fast-2.24.2-cp310-cp310-musllinux_1_2_x86_64.whl (5.1 MB 查看哈希值)

上传于 CPython 3.10 musllinux: musl 1.2+ x86-64

dbus_fast-2.24.2-cp310-cp310-musllinux_1_2_aarch64.whl (4.9 MB 查看哈希值)

上传于 CPython 3.10 musllinux: musl 1.2+ ARM64

dbus_fast-2.24.2-cp310-cp310-manylinux_2_31_x86_64.whl (4.0 MB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.31+ x86-64

dbus_fast-2.24.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.0 MB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ x86-64

dbus_fast-2.24.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (5.0 MB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ ARM64

dbus_fast-2.24.2-cp39-cp39-musllinux_1_2_x86_64.whl (5.1 MB 查看哈希值)

上传于 CPython 3.9 musllinux: musl 1.2+ x86-64

dbus_fast-2.24.2-cp39-cp39-musllinux_1_2_aarch64.whl (4.9 MB 查看哈希值)

上传于 CPython 3.9 musllinux: musl 1.2+ ARM64

dbus_fast-2.24.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.0 MB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ x86-64

dbus_fast-2.24.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (5.0 MB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ ARM64

dbus_fast-2.24.2-cp38-cp38-musllinux_1_2_x86_64.whl (4.2 MB 查看哈希)

上传于 CPython 3.8 musllinux: musl 1.2+ x86-64

dbus_fast-2.24.2-cp38-cp38-musllinux_1_2_aarch64.whl (4.0 MB 查看哈希)

上传于 CPython 3.8 musllinux: musl 1.2+ ARM64

dbus_fast-2.24.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.1 MB 查看哈希)

上传于 CPython 3.8 manylinux: glibc 2.17+ x86-64

dbus_fast-2.24.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.0 MB 查看哈希)

上传于 CPython 3.8 manylinux: glibc 2.17+ ARM64

支持者