Source code for omxplayer.dbus_connection
import dbus
[docs]class DBusConnectionError(Exception):
""" Connection error raised when DBusConnection can't set up a connection
"""
pass
[docs]class DBusConnection(object):
"""
Attributes:
proxy: The proxy object by which one interacts with a dbus object,
this makes communicating with a similar to that of communicating
with a POJO.
root_interface: org.mpris.MediaPlayer2 interface proxy object
player_interface: org.mpris.MediaPlayer2.Player interface proxy object
"""
def __init__(self, bus_address, dbus_name=None):
if dbus_name:
self._dbus_name = dbus_name
else:
self._dbus_name = 'org.mpris.MediaPlayer2.omxplayer'
self._bus = dbus.bus.BusConnection(bus_address)
self.proxy = self._create_proxy()
self.root_interface = dbus.Interface(self.proxy, 'org.mpris.MediaPlayer2')
self.player_interface = dbus.Interface(self.proxy, 'org.mpris.MediaPlayer2.Player')
self.properties_interface = dbus.Interface(self.proxy, 'org.freedesktop.DBus.Properties')
def _create_proxy(self):
try:
# introspection fails so it is disabled
proxy = self._bus.get_object(self._dbus_name,
'/org/mpris/MediaPlayer2',
introspect=False)
return proxy
except dbus.DBusException:
raise DBusConnectionError('Could not get proxy object')
# The python dbus bindings don't provide property access via the
# 'org.freedesktop.DBus.Properties' interface so we wrap the access of
# properties using
[docs]class DbusObject(object):
def __init__(self, object_proxy, property_manager, interface_name, methods, properties):
self._proxy = object_proxy
self._property_manager = property_manager
self._interface_name = interface_name
self._methods = methods
self._properties = properties
def __getattr__(self, name):
if name in self._methods:
return self._proxy.__getattr__(name)
elif name in self._properties:
return self._property_manager.Get(self._interface_name, name)
else:
raise AttributeError("'{}' attribute not specified on this DBus object".format(name))