in pystemd/dbuslib.pyx [0:0]
def call_method(
self,
const char *destination,
const char *path,
const char *interface,
const char *method,
args):
cdef:
int r
int arg_type
dbusc.sd_bus_message *msg_call = NULL
dbusc.sd_bus_message *msg_reply = NULL
dbusc.sd_bus_error error = dbusc.sd_bus_error(NULL, NULL, 0)
DbusMessage msg = DbusMessage()
r = dbusc.sd_bus_message_new_method_call(
self.bus,
&msg_call,
destination,
path,
interface,
method
)
if r < 0:
raise DBusError(r, None, 'Could not create DBus method')
for narg, (arg_type, arg_value) in enumerate(args or []):
try:
self._msg_append(msg_call, arg_type, arg_value)
except TypeError as e:
raise TypeError(
str(e) + ' for input "{}", element '
'number {} in input serie:\n{}'.format(
arg_value, narg, pformat(args)))
r = dbusc.sd_bus_call(self.bus, msg_call, 0, &error, msg.ref())
if r < 0:
raise DBusError(r, error.name, error.message)
msg.process_reply(False)
dbusc.sd_bus_message_unref(msg_call)
dbusc.sd_bus_message_unref(msg_reply)
dbusc.sd_bus_error_free(&error)
return msg