1
0
mirror of https://gitlab.com/libvirt/libvirt-python.git synced 2025-07-22 20:59:34 +03:00

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>
This commit is contained in:
Chris Lalancette
2010-05-19 09:02:30 -04:00
parent a6daa0108e
commit a4079e7ec6
3 changed files with 53 additions and 3 deletions

View File

@ -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" %