diff options
author | Chris Lalancette <clalance@redhat.com> | 2010-05-19 09:02:30 -0400 |
---|---|---|
committer | Chris Lalancette <clalance@redhat.com> | 2010-05-20 13:49:38 -0400 |
commit | a4079e7ec63c7ecdc5fcd23b33831c58e3679d46 (patch) | |
tree | 1041013675a52335025db9088bd09081eb64de7a /generator.py | |
parent | a6daa0108e072db02855e4203b7cd6066ddc2b39 (diff) | |
download | libvirt-python-a4079e7ec63c7ecdc5fcd23b33831c58e3679d46.tar.gz |
Fix up the python bindings for snapshotting.
This involved a few fixes. To start with,
an virDomainSnapshot object is really tied to a
domain, not a connection, so we have to generate
a slightly different object so that we can get
at self._dom for the object.
Next, we had to "dummy" up an override piece of
XML with a bogus argument that the function doesn't
actually take. That's so that the generator places
virDomainRevertToSnapshot underneath the correct
class (namely, the virDomain class).
Finally, we had to hand-implement the
virDomainRevertToSnapshot implementation, ignoring the
bogus pointer we are being passed.
With all of this in place, I was able to successfully
take a snapshot and revert to it using only the
Python bindings.
Signed-off-by: Chris Lalancette <clalance@redhat.com>
Diffstat (limited to 'generator.py')
-rwxr-xr-x | generator.py | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/generator.py b/generator.py index a243c82..d876df6 100755 --- a/generator.py +++ b/generator.py @@ -331,7 +331,7 @@ skip_impl = ( 'virNodeListDevices', 'virNodeDeviceListCaps', 'virConnectBaselineCPU', - 'virDomainSnapshotListNames', + 'virDomainRevertToSnapshot', ) @@ -385,6 +385,10 @@ skip_function = ( "virStorageVolGetConnect", ) +function_skip_index_one = ( + "virDomainRevertToSnapshot", +) + def print_function_wrapper(name, output, export, include): global py_types @@ -688,9 +692,13 @@ classes_destructors = { } class_skip_connect_impl = { - "virConnect" : True + "virConnect" : True, + "virDomainSnapshot": True, } +class_domain_impl = { + "virDomainSnapshot": True, +} functions_noexcept = { 'virDomainGetID': True, @@ -986,7 +994,7 @@ def buildWrappers(): info = (0, func, name, ret, args, file) function_classes[classe].append(info) elif name[0:3] == "vir" and len(args) >= 2 and args[1][1] == type \ - and file != "python_accessor": + and file != "python_accessor" and not name in function_skip_index_one: found = 1 func = nameFixup(name, classe, type, file) info = (1, func, name, ret, args, file) @@ -1128,6 +1136,8 @@ def buildWrappers(): "virStorageVol", "virNodeDevice", "virSecret","virStream", "virNWFilter" ]: classes.write(" def __init__(self, conn, _obj=None):\n") + elif classname in [ 'virDomainSnapshot' ]: + classes.write(" def __init__(self, dom, _obj=None):\n") else: classes.write(" def __init__(self, _obj=None):\n") if reference_keepers.has_key(classname): @@ -1142,6 +1152,8 @@ def buildWrappers(): classes.write(" self._conn = conn\n" + \ " if not isinstance(conn, virConnect):\n" + \ " self._conn = conn._conn\n") + elif classname in [ "virDomainSnapshot" ]: + classes.write(" self._dom = dom\n") classes.write(" if _obj != None:self._o = _obj;return\n") classes.write(" self._o = None\n\n"); destruct=None @@ -1158,6 +1170,10 @@ def buildWrappers(): classes.write(" def connect(self):\n") classes.write(" return self._conn\n\n") + if class_domain_impl.has_key(classname): + classes.write(" def domain(self):\n") + classes.write(" return self._dom\n\n") + flist = function_classes[classname] flist.sort(functionCompare) oldfile = "" @@ -1252,6 +1268,10 @@ def buildWrappers(): classes.write( " if ret is None:raise libvirtError('%s() failed', vol=self)\n" % (name)) + elif classname == "virDomainSnapshot": + classes.write( + " if ret is None:raise libvirtError('%s() failed', dom=self._dom)\n" % + (name)) else: classes.write( " if ret is None:raise libvirtError('%s() failed')\n" % |