]> xenbits.xensource.com Git - libvirt.git/commitdiff
* python/virConnect.py: needed for events from the python bindings
authorDaniel Veillard <veillard@redhat.com>
Fri, 31 Oct 2008 13:56:47 +0000 (13:56 +0000)
committerDaniel Veillard <veillard@redhat.com>
Fri, 31 Oct 2008 13:56:47 +0000 (13:56 +0000)
  by Ben Guthro
daniel

ChangeLog
python/virConnect.py [new file with mode: 0644]

index d2b778cf028911f39bfd40b68ca532c749f78e77..63f27651c1897d73a366fd4988f7716e32f4b36a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Fri Oct 31 14:55:46 CET 2008 Daniel Veillard <veillard@redhat.com>
+
+       * python/virConnect.py: needed for events from the python bindings
+         by Ben Guthro
+
 Fri Oct 31 14:04:52 CET 2008 Daniel Veillard <veillard@redhat.com>
 
        * src/xm_internal.c: add minimum domain memory size check for Xen
diff --git a/python/virConnect.py b/python/virConnect.py
new file mode 100644 (file)
index 0000000..ec29b33
--- /dev/null
@@ -0,0 +1,43 @@
+    def __del__(self):
+        try:
+           for cb,opaque in self.domainEventCallbacks.items():
+               del self.domainEventCallbacks[cb]
+           self.domainEventCallbacks = None
+           libvirtmod.virConnectDomainEventDeregister(self._o, self)
+        except AttributeError:
+           pass
+
+        if self._o != None:
+            libvirtmod.virConnectClose(self._o)
+        self._o = None
+
+    def domainEventDeregister(self, cb):
+        """Removes a Domain Event Callback. De-registering for a
+           domain callback will disable delivery of this event type """
+        try:
+            del self.domainEventCallbacks[cb]
+            if len(self.domainEventCallbacks) == 0:
+                ret = libvirtmod.virConnectDomainEventDeregister(self._o, self)
+                if ret == -1: raise libvirtError ('virConnectDomainEventDeregister() failed', conn=self)
+        except AttributeError:
+            pass
+
+    def domainEventRegister(self, cb, opaque):
+        """Adds a Domain Event Callback. Registering for a domain
+           callback will enable delivery of the events """
+        try:
+            self.domainEventCallbacks[cb] = opaque
+        except AttributeError:
+            self.domainEventCallbacks = {cb:opaque}
+            ret = libvirtmod.virConnectDomainEventRegister(self._o, self)
+            if ret == -1: raise libvirtError ('virConnectDomainEventRegister() failed', conn=self)
+
+    def dispatchDomainEventCallbacks(self, dom, event):
+        """Dispatches events to python user domain event callbacks
+        """
+        try:
+            for cb,opaque in self.domainEventCallbacks.items():
+                cb(self,dom,event,opaque)
+            return 0
+        except AttributeError:
+            pass