Skip to main content

DBus library in Python 3

Project description

dasbus

This DBus library is written in Python 3, based on GLib and inspired by pydbus. Find out more in the documentation.

The code used to be part of the Anaconda Installer project. It was based on the pydbus library, but we replaced it with our own solution because its upstream development stalled. The dasbus library is a result of this effort.

Build Status Documentation Status codecov

Requirements

  • Python 3.6+
  • PyGObject 3

You can install PyGObject provided by your operating system or use PyPI. The system package is usually called python3-gi, python3-gobject or pygobject3. See the instructions for your platform (only for PyGObject, you don't need cairo or GTK).

The library is known to work with Python 3.8, PyGObject 3.34 and GLib 2.63, but these are not the required minimal versions.

Installation

Install the package from PyPI or install the package provided by your operating system if available.

Install from PyPI

Follow the instructions above to install the requirements before you install dasbus with pip. The required dependencies has to be installed manually in this case.

pip3 install dasbus

Install the system package

Follow the instructions for your operating system to install the python-dasbus package. The required dependencies should be installed automatically by the system package manager.

Examples

Show the current hostname.

from dasbus.connection import SystemMessageBus
bus = SystemMessageBus()

proxy = bus.get_proxy(
    "org.freedesktop.hostname1",
    "/org/freedesktop/hostname1"
)

print(proxy.Hostname)

Send a notification to the notification server.

from dasbus.connection import SessionMessageBus
bus = SessionMessageBus()

proxy = bus.get_proxy(
    "org.freedesktop.Notifications",
    "/org/freedesktop/Notifications"
)

id = proxy.Notify(
    "", 0, "face-smile", "Hello World!",
    "This notification can be ignored.",
    [], {}, 0
)

print("The notification {} was sent.".format(id))

Handle a closed notification.

from dasbus.loop import EventLoop
loop = EventLoop()

from dasbus.connection import SessionMessageBus
bus = SessionMessageBus()

proxy = bus.get_proxy(
    "org.freedesktop.Notifications",
    "/org/freedesktop/Notifications"
)

def callback(id, reason):
    print("The notification {} was closed.".format(id))

proxy.NotificationClosed.connect(callback)
loop.run()

Asynchronously fetch a list of network devices.

from dasbus.loop import EventLoop
loop = EventLoop()

from dasbus.connection import SystemMessageBus
bus = SystemMessageBus()

proxy = bus.get_proxy(
    "org.freedesktop.NetworkManager",
    "/org/freedesktop/NetworkManager"
)

def callback(call):
    print(call())

proxy.GetDevices(callback=callback)
loop.run()

Inhibit the system suspend and hibernation.

import os
from dasbus.connection import SystemMessageBus
from dasbus.unix import GLibClientUnix
bus = SystemMessageBus()

proxy = bus.get_proxy(
    "org.freedesktop.login1",
    "/org/freedesktop/login1",
    client=GLibClientUnix
)

fd = proxy.Inhibit(
    "sleep", "my-example", "Running an example", "block"
)

proxy.ListInhibitors()
os.close(fd)

Define the org.example.HelloWorld service.

class HelloWorld(object):
    __dbus_xml__ = """
    <node>
        <interface name="org.example.HelloWorld">
            <method name="Hello">
                <arg direction="in" name="name" type="s" />
                <arg direction="out" name="return" type="s" />
            </method>
        </interface>
    </node>
    """

    def Hello(self, name):
        return "Hello {}!".format(name)

Define the org.example.HelloWorld service with an automatically generated XML specification.

from dasbus.server.interface import dbus_interface
from dasbus.typing import Str

@dbus_interface("org.example.HelloWorld")
class HelloWorld(object):

    def Hello(self, name: Str) -> Str:
        return "Hello {}!".format(name)

print(HelloWorld.__dbus_xml__)

Publish the org.example.HelloWorld service on the session message bus.

from dasbus.connection import SessionMessageBus
bus = SessionMessageBus()
bus.publish_object("/org/example/HelloWorld", HelloWorld())
bus.register_service("org.example.HelloWorld")

from dasbus.loop import EventLoop
loop = EventLoop()
loop.run()

See more examples in the documentation.

Inspiration

Look at the complete examples or DBus services of the Anaconda Installer for more inspiration.

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

dasbus-1.7.tar.gz (78.6 kB view details)

Uploaded Source

Built Distribution

dasbus-1.7-py3-none-any.whl (63.1 kB view details)

Uploaded Python 3

File details

Details for the file dasbus-1.7.tar.gz.

File metadata

  • Download URL: dasbus-1.7.tar.gz
  • Upload date:
  • Size: 78.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.7

File hashes

Hashes for dasbus-1.7.tar.gz
Algorithm Hash digest
SHA256 a8850d841adfe8ee5f7bb9f82cf449ab9b4950dc0633897071718e0d0036b6f6
MD5 36cc01e43cada6bd258f1732f7276e7c
BLAKE2b-256 37799c5984d723ffbe2e839ee649690f3e1fa6544ab6a17a5150e5ac14a47072

See more details on using hashes here.

File details

Details for the file dasbus-1.7-py3-none-any.whl.

File metadata

  • Download URL: dasbus-1.7-py3-none-any.whl
  • Upload date:
  • Size: 63.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.7

File hashes

Hashes for dasbus-1.7-py3-none-any.whl
Algorithm Hash digest
SHA256 0a9433e9e72c2c865fa2d5ef824ac4ef49b540cf57f6396e515c2f314e5c14cd
MD5 7b86c4bfa1ff8ca252d04122468af565
BLAKE2b-256 e1b44d55b9359bc34d56b29b943b378331dd8aaea6db6d0543e5d97fed4b1af7

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