On Wed, Apr 14, 2010 at 03:03:45PM +0100, Daniel P. Berrange wrote: > The generator code was totally wrong for the virDomainSnapshot > APIs, not generating the wrapper class, and giving methods the > wrong names > > * generator.py: Set metadata for virDomainSnapshot type & APIs > * libvirt-override-api.xml, libvirt-override.c: Hand-code the > virDomainSnapshotListNames glue layer > --- > python/generator.py | 27 ++++++++++++++++++++++- > python/libvirt-override-api.xml | 6 +++++ > python/libvirt-override.c | 46 +++++++++++++++++++++++++++++++++++++++ > 3 files changed, 78 insertions(+), 1 deletions(-) > > diff --git a/python/generator.py b/python/generator.py > index cb9f3d9..6f082e8 100755 > --- a/python/generator.py > +++ b/python/generator.py > @@ -243,6 +243,9 @@ py_types = { > 'const virStream *': ('O', "virStream", "virStreamPtr", "virStreamPtr"), > > 'virDomainSnapshotPtr': ('O', "virDomainSnapshot", "virDomainSnapshotPtr", "virDomainSnapshotPtr"), > + 'const virDomainSnapshotPtr': ('O', "virDomainSnapshot", "virDomainSnapshotPtr", "virDomainSnapshotPtr"), > + 'virDomainSnapshot *': ('O', "virDomainSnapshot", "virDomainSnapshotPtr", "virDomainSnapshotPtr"), > + 'const virDomainSnapshot *': ('O', "virDomainSnapshot", "virDomainSnapshotPtr", "virDomainSnapshotPtr"), > } > > py_return_types = { > @@ -277,6 +280,7 @@ skip_impl = ( > 'virConnectListDefinedStorageVols', > 'virConnectListDefinedInterfaces', > 'virConnectListNWFilters', > + 'virDomainSnapshotListNames', > 'virConnGetLastError', > 'virGetLastError', > 'virDomainGetInfo', > @@ -643,6 +647,8 @@ classes_type = { > "virStream *": ("._o", "virStream(self, _obj=%s)", "virStream"), > "virConnectPtr": ("._o", "virConnect(_obj=%s)", "virConnect"), > "virConnect *": ("._o", "virConnect(_obj=%s)", "virConnect"), > + "virDomainSnapshotPtr": ("._o", "virDomainSnapshot(self,_obj=%s)", "virDomainSnapshot"), > + "virDomainSnapshot *": ("._o", "virDomainSnapshot(self, _obj=%s)", "virDomainSnapshot"), > } > > converter_type = { > @@ -651,7 +657,7 @@ converter_type = { > primary_classes = ["virDomain", "virNetwork", "virInterface", > "virStoragePool", "virStorageVol", > "virConnect", "virNodeDevice", "virSecret", > - "virStream"] > + "virStream", "virDomainSnapshot"] > > classes_ancestor = { > } > @@ -663,6 +669,7 @@ classes_destructors = { > "virStorageVol": "virStorageVolFree", > "virNodeDevice" : "virNodeDeviceFree", > "virSecret": "virSecretFree", > + "virDomainSnapshot": "virDomainSnapshotFree", > # We hand-craft __del__ for this one > #"virStream": "virStreamFree", > } > @@ -767,6 +774,24 @@ def nameFixup(name, classe, type, file): > elif name[0:12] == "virDomainGet": > func = name[12:] > func = string.lower(func[0:1]) + func[1:] > + elif name[0:29] == "virDomainSnapshotLookupByName": > + func = name[9:] > + func = string.lower(func[0:1]) + func[1:] > + elif name[0:26] == "virDomainSnapshotListNames": > + func = name[9:] > + func = string.lower(func[0:1]) + func[1:] > + elif name[0:20] == "virDomainSnapshotNum": > + func = name[9:] > + func = string.lower(func[0:1]) + func[1:] > + elif name[0:26] == "virDomainSnapshotCreateXML": > + func = name[9:] > + func = string.lower(func[0:1]) + func[1:] > + elif name[0:24] == "virDomainSnapshotCurrent": > + func = name[9:] > + func = string.lower(func[0:1]) + func[1:] > + elif name[0:17] == "virDomainSnapshot": > + func = name[17:] > + func = string.lower(func[0:1]) + func[1:] > elif name[0:9] == "virDomain": > func = name[9:] > func = string.lower(func[0:1]) + func[1:] > diff --git a/python/libvirt-override-api.xml b/python/libvirt-override-api.xml > index e95c46a..6f1bc04 100644 > --- a/python/libvirt-override-api.xml > +++ b/python/libvirt-override-api.xml > @@ -243,5 +243,11 @@ > <arg name='xmlCPUs' type='const char **' info='array of XML descriptions of host CPUs'/> > <arg name='flags' type='unsigned int' info='fine-tuning flags, currently unused, pass 0.'/> > </function> > + <function name='virDomainSnapshotListNames' file='python'> > + <info>collect the list of snapshots for the given domain</info> > + <arg name='dom' type='virDomainPtr' info='pointer to the domain'/> > + <arg name='flags' type='unsigned int' info='flags, curently unused'/> > + <return type='str *' info='the list of Names of None in case of error'/> > + </function> > </symbols> > </api> > diff --git a/python/libvirt-override.c b/python/libvirt-override.c > index 02bc313..ce21f60 100644 > --- a/python/libvirt-override.c > +++ b/python/libvirt-override.c > @@ -943,6 +943,51 @@ libvirt_virConnectListDefinedDomains(PyObject *self ATTRIBUTE_UNUSED, > } > > static PyObject * > +libvirt_virDomainSnapshotListNames(PyObject *self ATTRIBUTE_UNUSED, > + PyObject *args) { > + PyObject *py_retval; > + char **names = NULL; > + int c_retval, i; > + virDomainPtr dom; > + PyObject *pyobj_dom; > + int flags; > + > + if (!PyArg_ParseTuple(args, (char *)"Oi:virDomainSnapshotListNames", &pyobj_dom, &flags)) > + return(NULL); > + dom = (virDomainPtr) PyvirDomain_Get(pyobj_dom); > + > + LIBVIRT_BEGIN_ALLOW_THREADS; > + c_retval = virDomainSnapshotNum(dom, flags); > + LIBVIRT_END_ALLOW_THREADS; > + if (c_retval < 0) > + return VIR_PY_NONE; > + > + if (c_retval) { > + names = malloc(sizeof(*names) * c_retval); > + if (!names) > + return VIR_PY_NONE; > + LIBVIRT_BEGIN_ALLOW_THREADS; > + c_retval = virDomainSnapshotListNames(dom, names, c_retval, flags); > + LIBVIRT_END_ALLOW_THREADS; > + if (c_retval < 0) { > + free(names); > + return VIR_PY_NONE; > + } > + } > + py_retval = PyList_New(c_retval); > + > + if (names) { > + for (i = 0;i < c_retval;i++) { > + PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); > + free(names[i]); > + } > + free(names); > + } > + > + return(py_retval); > +} > + > +static PyObject * > libvirt_virDomainGetInfo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { > PyObject *py_retval; > int c_retval; > @@ -3275,6 +3320,7 @@ static PyMethodDef libvirtMethods[] = { > {(char *) "virConnectListDefinedInterfaces", libvirt_virConnectListDefinedInterfaces, METH_VARARGS, NULL}, > {(char *) "virConnectBaselineCPU", libvirt_virConnectBaselineCPU, METH_VARARGS, NULL}, > {(char *) "virDomainGetJobInfo", libvirt_virDomainGetJobInfo, METH_VARARGS, NULL}, > + {(char *) "virDomainSnapshotListNames", libvirt_virDomainSnapshotListNames, METH_VARARGS, NULL}, > {NULL, NULL, 0, NULL} > }; > Arghh ... the first brown paper bag bug of 0.8.0, but that was to be expected ! Looks fine, ACK, Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@xxxxxxxxxxxx | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/ -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list