python: Implement new event API.
[libguestfs.git] / generator / generator_python.ml
index f3a2a94..ffd63da 100644 (file)
@@ -28,6 +28,7 @@ open Generator_optgroups
 open Generator_actions
 open Generator_structs
 open Generator_c
+open Generator_events
 
 (* Generate Python C module. *)
 let rec generate_python_c () =
@@ -455,6 +456,10 @@ free_strings (char **argv)
   pr "static PyMethodDef methods[] = {\n";
   pr "  { (char *) \"create\", py_guestfs_create, METH_VARARGS, NULL },\n";
   pr "  { (char *) \"close\", py_guestfs_close, METH_VARARGS, NULL },\n";
+  pr "  { (char *) \"set_event_callback\",\n";
+  pr "    py_guestfs_set_event_callback, METH_VARARGS, NULL },\n";
+  pr "  { (char *) \"delete_event_callback\",\n";
+  pr "    py_guestfs_delete_event_callback, METH_VARARGS, NULL },\n";
   List.iter (
     fun (name, _, _, _, _, _, _) ->
       pr "  { (char *) \"%s\", py_guestfs_%s, METH_VARARGS, NULL },\n"
@@ -531,6 +536,15 @@ logvols = g.lvs ()
 
 import libguestfsmod
 
+";
+
+  List.iter (
+    fun (name, bitmask) ->
+      pr "EVENT_%s = 0x%x\n" (String.uppercase name) bitmask
+  ) events;
+  pr "\n";
+
+  pr "\
 class GuestFS:
     \"\"\"Instances of this class are libguestfs API handles.\"\"\"
 
@@ -541,6 +555,34 @@ class GuestFS:
     def __del__ (self):
         libguestfsmod.close (self._o)
 
+    def set_event_callback (self, cb, event_bitmask):
+        u\"\"\"Register an event callback.
+
+        Register \"cb\" as a callback function for all of the
+        events in \"event_bitmask\".  \"event_bitmask\" should be
+        one or more \"guestfs.EVENT_*\" flags logically or'd together.
+
+        This function returns an event handle which can be used
+        to delete the callback (see \"delete_event_callback\").
+
+        The callback function receives 4 parameters:
+
+        cb (event, event_handle, buf, array)
+
+        \"event\" is one of the \"EVENT_*\" flags.  \"buf\" is a
+        message buffer (only for some types of events).  \"array\"
+        is an array of integers (only for some types of events).
+
+        You should read the documentation for
+        \"guestfs_set_event_callback\" in guestfs(3) before using
+        this function.
+        \"\"\"
+        return libguestfsmod.set_event_callback (self._o, cb, event_bitmask)
+
+    def delete_event_callback (self, event_handle):
+        u\"\"\"Delete an event callback.\"\"\"
+        libguestfsmod.delete_event_callback (self._o, event_handle)
+
 ";
 
   List.iter (