Coverage for /home/antoine/projects/xpra-git/dist/python3/lib64/python/xpra/server/dbus/dbus_server_base.py : 96%
Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1#!/usr/bin/env python
2# This file is part of Xpra.
3# Copyright (C) 2015-2017 Antoine Martin <antoine@xpra.org>
4# Xpra is released under the terms of the GNU GPL v2, or, at your option, any
5# later version. See the file COPYING for details.
7import dbus.service
9from xpra.log import Logger
10log = Logger("dbus", "server")
12BUS_NAME = "org.xpra.Server"
13INTERFACE = "org.xpra.Server"
14PATH = "/org/xpra/Server"
17class DBUS_Server_Base(dbus.service.Object):
19 def __init__(self, bus, server, name):
20 self.server = server
21 bus_name = dbus.service.BusName(name, bus)
22 super().__init__(bus_name, PATH)
23 self.log("(%s)", server)
24 self._properties = {}
26 def cleanup(self):
27 try:
28 log("calling %s", self.remove_from_connection)
29 self.remove_from_connection()
30 except Exception as e: # pragma: no cover
31 log.error("Error removing the DBUS server:")
32 log.error(" %s", e)
35 def log(self, fmt, *args):
36 log("%s"+fmt, INTERFACE, *args)
39 @dbus.service.signal(INTERFACE, signature='sas')
40 def Event(self, event, args):
41 self.log(".Event(%s, %s)", event, args)
44 @dbus.service.method(dbus.PROPERTIES_IFACE, in_signature='ss', out_signature='v')
45 def Get(self, interface_name, property_name):
46 conv = self._properties.get(property_name)
47 if conv is None:
48 raise dbus.exceptions.DBusException("invalid property")
49 server_property_name, _ = conv
50 v = getattr(self.server, server_property_name)
51 self.log(".Get(%s, %s)=%s", interface_name, property_name, v)
52 return v
54 @dbus.service.method(dbus.PROPERTIES_IFACE, in_signature='', out_signature='a{sv}')
55 def GetAll(self, interface_name):
56 if interface_name==dbus.PROPERTIES_IFACE:
57 v = dict((x, self.Get(x)) for x in self._properties.keys())
58 else:
59 v = {}
60 self.log(".GetAll(%s)=%s", interface_name, v)
61 return v
63 @dbus.service.method(dbus.PROPERTIES_IFACE, in_signature='ssv')
64 def Set(self, interface_name, property_name, new_value):
65 self.log(".Set(%s, %s, %s)", interface_name, property_name, new_value)
66 conv = self._properties.get(property_name)
67 if conv is None:
68 raise dbus.exceptions.DBusException("invalid property")
69 server_property_name, validator = conv
70 assert hasattr(self.server, server_property_name)
71 setattr(self.server, server_property_name, validator(new_value))
73 @dbus.service.signal(dbus.PROPERTIES_IFACE, signature='sa{sv}as')
74 def PropertiesChanged(self, interface_name, changed_properties, invalidated_properties):
75 pass