X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=generator%2Fgenerator_python.ml;h=48dd24f6d8b13e8367658a29c9ba757c927de711;hb=b148df4df9f27162b2e1991c3fbeef070b2c343a;hp=f3a2a942cfb919d9fa5680b5c0dae92d32de9208;hpb=16da7589e91b0030fb5564553447f80b97c0b18c;p=libguestfs.git diff --git a/generator/generator_python.ml b/generator/generator_python.ml index f3a2a94..48dd24f 100644 --- a/generator/generator_python.ml +++ b/generator/generator_python.ml @@ -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,18 @@ 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 ClosedHandle(ValueError): + pass + class GuestFS: \"\"\"Instances of this class are libguestfs API handles.\"\"\" @@ -539,7 +556,57 @@ class GuestFS: self._o = libguestfsmod.create () def __del__ (self): + if self._o: + libguestfsmod.close (self._o) + + def _check_not_closed (self): + if not self._o: + raise ClosedHandle (\"GuestFS: method called on closed handle\") + + def close (self): + u\"\"\"Explicitly close the guestfs handle. + + The handle is closed implicitly when its reference count goes + to zero (eg. when it goes out of scope or the program ends). + + This call is only needed if you want to force the handle to + close now. After calling this, the program must not call + any method on the handle (except the implicit call to + __del__ which happens when the final reference is cleaned up). + \"\"\" + self._check_not_closed () libguestfsmod.close (self._o) + self._o = None + + 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. + \"\"\" + self._check_not_closed () + return libguestfsmod.set_event_callback (self._o, cb, event_bitmask) + + def delete_event_callback (self, event_handle): + u\"\"\"Delete an event callback.\"\"\" + self._check_not_closed () + libguestfsmod.delete_event_callback (self._o, event_handle) "; @@ -599,6 +666,7 @@ class GuestFS: | StringList n | DeviceList n -> pr " %s = list (%s)\n" n n ) args; + pr " self._check_not_closed ()\n"; pr " return libguestfsmod.%s (self._o" name; List.iter (fun arg -> pr ", %s" (name_of_argt arg)) (args@optargs); pr ")\n\n";