diff options
author | Eric Blake <eblake@redhat.com> | 2014-02-04 16:14:16 -0700 |
---|---|---|
committer | Eric Blake <eblake@redhat.com> | 2014-03-25 09:12:22 -0600 |
commit | e3da8f178ec007c79bb9305e61bbea222f71b232 (patch) | |
tree | 4862420d968a8caa20a9adfb6f0928a24ae3fabe /libvirt-qemu-override.py | |
parent | 493ca0883dc3caf6a9a6aff1e7ead7a5a1365973 (diff) | |
download | libvirt-python-e3da8f178ec007c79bb9305e61bbea222f71b232.tar.gz |
qemu: support arbitrary monitor events
Wrap the new virConnectDomainQemuMonitorEventRegister function
added in libvirt 1.2.3. This patch copies heavily from
network events (commit 6ea5be0) and from event loop callbacks
in libvirt-override.c, since in the libvirt_qemu module, we
must expose top-level functions rather than class members.
* generator.py (qemu_skip_function): Don't generate event code.
(qemuBuildWrappers): Delay manual portion until after imports.
* libvirt-qemu-override.py (qemuMonitorEventRegister)
(qemuMonitorEventDeregister): New file.
* libvirt-qemu-override.c
(libvirt_qemu_virConnectDomainQemuMonitorEventFreeFunc)
(libvirt_qemu_virConnectDomainQemuMonitorEventCallback)
(libvirt_qemu_virConnectDomainQemuMonitorEventRegister)
(libvirt_qemu_virConnectDomainQemuMonitorEventDeregister)
(libvirt_qemu_lookupPythonFunc, getLibvirtQemuDictObject)
(getLibvirtQemuModuleObject): New functions.
Signed-off-by: Eric Blake <eblake@redhat.com>
Diffstat (limited to 'libvirt-qemu-override.py')
-rw-r--r-- | libvirt-qemu-override.py | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/libvirt-qemu-override.py b/libvirt-qemu-override.py new file mode 100644 index 0000000..265a252 --- /dev/null +++ b/libvirt-qemu-override.py @@ -0,0 +1,35 @@ +# Manually written part of python bindings for libvirt-qemu + +def _dispatchQemuMonitorEventCallback(conn, dom, event, seconds, micros, details, cbData): + """Dispatches events to python user qemu monitor event callbacks + """ + cb = cbData["cb"] + opaque = cbData["opaque"] + + cb(conn, libvirt.virDomain(conn, _obj=dom), event, seconds, micros, details, opaque) + return 0 + +def qemuMonitorEventDeregister(conn, callbackID): + """Removes a qemu monitor event callback. De-registering for a callback + will disable delivery of this event type""" + try: + ret = libvirtmod_qemu.virConnectDomainQemuMonitorEventDeregister(conn._o, callbackID) + if ret == -1: raise libvirt.libvirtError ('virConnectDomainQemuMonitorEventDeregister() failed') + del conn.qemuMonitorEventCallbackID[callbackID] + except AttributeError: + pass + +def qemuMonitorEventRegister(conn, dom, event, cb, opaque, flags=0): + """Adds a qemu monitor event callback. Registering for a monitor + callback will enable delivery of the events""" + if not hasattr(conn, 'qemuMonitorEventCallbackID'): + conn.qemuMonitorEventCallbackID = {} + cbData = { "cb": cb, "conn": conn, "opaque": opaque } + if dom is None: + ret = libvirtmod_qemu.virConnectDomainQemuMonitorEventRegister(conn._o, None, event, cbData, flags) + else: + ret = libvirtmod_qemu.virConnectDomainQemuMonitorEventRegister(conn._o, dom._o, event, cbData, flags) + if ret == -1: + raise libvirt.libvirtError ('virConnectDomainQemuMonitorEventRegister() failed') + conn.qemuMonitorEventCallbackID[ret] = opaque + return ret |