Skip to main content

No project description provided

Project description

dbus-objects checks tests codecov

DBus objects implementation on top of the Python type system.

Integrations:

import random

from typing import List

import dbus_objects.object
import dbus_objects.integration.jeepney


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

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

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

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

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

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

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

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

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


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()

This example will generate the following server topology:

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

And, for eg., the following DBus introspection XML for /io/github/ffy00/dbus_objects/example:

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

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dbus-objects-0.0.1.tar.gz (20.1 kB view details)

Uploaded Source

Built Distribution

dbus_objects-0.0.1-py3-none-any.whl (17.8 kB view details)

Uploaded Python 3

File details

Details for the file dbus-objects-0.0.1.tar.gz.

File metadata

  • Download URL: dbus-objects-0.0.1.tar.gz
  • Upload date:
  • Size: 20.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.51.0 CPython/3.8.6

File hashes

Hashes for dbus-objects-0.0.1.tar.gz
Algorithm Hash digest
SHA256 00981ee4818dd235d49510382366d653338c9ff6121d59d50d0a10ad13ef6406
MD5 2fb77be3b74c5e2f382d75a64221b9b1
BLAKE2b-256 17c584d73cbca67ffc8bf7309f55a8d449150b15248b7b04a47c6f0df26aa08b

See more details on using hashes here.

File details

Details for the file dbus_objects-0.0.1-py3-none-any.whl.

File metadata

  • Download URL: dbus_objects-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 17.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.51.0 CPython/3.8.6

File hashes

Hashes for dbus_objects-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a748789265d377e0c73ef209c02f26f4243dd34270c0fde1619a6332a0b9a78b
MD5 93ef68d7d5b51687039862bb44c31850
BLAKE2b-256 e845d76adbd873160907b6657f67985d455b5ac0494324e7290daeda4b5704cf

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page