]> xenbits.xensource.com Git - libvirt.git/commitdiff
python: add API exports for virConnectListAllDomains()
authorPeter Krempa <pkrempa@redhat.com>
Sun, 20 May 2012 14:20:11 +0000 (16:20 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 18 Jun 2012 19:24:13 +0000 (21:24 +0200)
This patch adds export of the new API function
virConnectListAllDomains() to the libvirt-python bindings. The
virConnect object now has method "listAllDomains" that takes only the
flags parameter and returns a python list of virDomain object
corresponding to virDomainPtrs returned by the underlying api.

The implementation is done manually as the generator does not support
wrapping list of virDomainPtrs into virDomain objects.

python/libvirt-override-api.xml
python/libvirt-override-virConnect.py
python/libvirt-override.c

index 0bafd21e8b6df01ae9344d6761490acb8e116e70..2fd6dec4edc96d8a3c635211c72bf93c4db5c5b2 100644 (file)
     <function name='virConnectListDefinedDomains' file='python'>
       <info>list the defined domains, stores the pointers to the names in @names</info>
       <arg name='conn' type='virConnectPtr' info='pointer to the hypervisor connection'/>
-      <return type='str *' info='the list of Names of None in case of error'/>
+      <return type='str *' info='the list of Names or None in case of error'/>
+    </function>
+    <function name='virConnectListAllDomains' file='python'>
+      <info>returns list of all defined domains</info>
+      <arg name='conn' type='virConnectPtr' info='pointer to the hypervisor connection'/>
+      <arg name='flags' type='unsigned int' info='optional flags'/>
+      <return type='domain *' info='the list of domains or None in case of error'/>
     </function>
     <function name='virConnectListNetworks' file='python'>
       <info>list the networks, stores the pointers to the names in @names</info>
       <arg name='conn' type='virConnectPtr' info='pointer to the hypervisor connection'/>
-      <return type='str *' info='the list of Names of None in case of error'/>
+      <return type='str *' info='the list of Names or None in case of error'/>
     </function>
     <function name='virConnectListDefinedNetworks' file='python'>
       <info>list the defined networks, stores the pointers to the names in @names</info>
       <arg name='conn' type='virConnectPtr' info='pointer to the hypervisor connection'/>
-      <return type='str *' info='the list of Names of None in case of error'/>
+      <return type='str *' info='the list of Names or None in case of error'/>
     </function>
     <function name='virDomainLookupByUUID' file='python'>
       <info>Try to lookup a domain on the given hypervisor based on its UUID.</info>
index 811e16bbfa49d7687139bbb6102b1b00e40fd709..ecb5680538db7fb57d883d79813267898bb53626 100644 (file)
             raise libvirtError ('virConnectDomainEventRegisterAny() failed', conn=self)
         self.domainEventCallbackID[ret] = opaque
         return ret
+
+    def listAllDomains(self, flags):
+        """List all domains and returns a list of domain objects"""
+        ret = libvirtmod.virConnectListAllDomains(self._o, flags)
+        if ret is None:
+            raise libvirtError("virConnectListAllDomains() failed", conn=self)
+
+        retlist = list()
+        for domptr in ret:
+            retlist.append(virDomain(self, _obj=domptr))
+
+        return retlist
index 676002c4b73c42bdfab66c7503c14b8aca0400f5..cfbf254a085ead1b22689b5d3f72db84f9f77b04 100644 (file)
@@ -1938,7 +1938,7 @@ libvirt_virConnectGetLibVersion (PyObject *self ATTRIBUTE_UNUSED,
 
 static PyObject *
 libvirt_virConnectListDomainsID(PyObject *self ATTRIBUTE_UNUSED,
-                               PyObject *args) {
+                                PyObject *args) {
     PyObject *py_retval;
     int *ids = NULL, c_retval, i;
     virConnectPtr conn;
@@ -1979,6 +1979,53 @@ libvirt_virConnectListDomainsID(PyObject *self ATTRIBUTE_UNUSED,
     return py_retval;
 }
 
+static PyObject *
+libvirt_virConnectListAllDomains(PyObject *self ATTRIBUTE_UNUSED,
+                                 PyObject *args)
+{
+    PyObject *pyobj_conn;
+    PyObject *py_retval = NULL;
+    PyObject *tmp = NULL;
+    virConnectPtr conn;
+    virDomainPtr *doms = NULL;
+    int c_retval = 0;
+    int i;
+    unsigned int flags;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:virConnectListAllDomains",
+                          &pyobj_conn, &flags))
+        return NULL;
+    conn = (virConnectPtr) PyvirConnect_Get(pyobj_conn);
+
+    LIBVIRT_BEGIN_ALLOW_THREADS;
+    c_retval = virConnectListAllDomains(conn, &doms, flags);
+    LIBVIRT_END_ALLOW_THREADS;
+    if (c_retval < 0)
+        return VIR_PY_NONE;
+
+    if (!(py_retval = PyList_New(c_retval)))
+        goto cleanup;
+
+    for (i = 0; i < c_retval; i++) {
+        if (!(tmp = libvirt_virDomainPtrWrap(doms[i])) ||
+            PyList_SetItem(py_retval, i, tmp) < 0) {
+            Py_XDECREF(tmp);
+            Py_DECREF(py_retval);
+            py_retval = NULL;
+            goto cleanup;
+        }
+        /* python steals the pointer */
+        doms[i] = NULL;
+    }
+
+cleanup:
+    for (i = 0; i < c_retval; i++)
+        if (doms[i])
+            virDomainFree(doms[i]);
+    VIR_FREE(doms);
+    return py_retval;
+}
+
 static PyObject *
 libvirt_virConnectListDefinedDomains(PyObject *self ATTRIBUTE_UNUSED,
                                      PyObject *args) {
@@ -5634,6 +5681,7 @@ static PyMethodDef libvirtMethods[] = {
     {(char *) "virConnectOpenAuth", libvirt_virConnectOpenAuth, METH_VARARGS, NULL},
     {(char *) "virConnectListDomainsID", libvirt_virConnectListDomainsID, METH_VARARGS, NULL},
     {(char *) "virConnectListDefinedDomains", libvirt_virConnectListDefinedDomains, METH_VARARGS, NULL},
+    {(char *) "virConnectListAllDomains", libvirt_virConnectListAllDomains, METH_VARARGS, NULL},
     {(char *) "virConnectDomainEventRegister", libvirt_virConnectDomainEventRegister, METH_VARARGS, NULL},
     {(char *) "virConnectDomainEventDeregister", libvirt_virConnectDomainEventDeregister, METH_VARARGS, NULL},
     {(char *) "virConnectDomainEventRegisterAny", libvirt_virConnectDomainEventRegisterAny, METH_VARARGS, NULL},