[libvirt] [PATCH python 0/5] Fix many screwups in virNetworkPort

The awesome thing about the python code generator is how it generates rubbish unless you had the right code hacks in the generator. This series of fixes correct all the screwups missed first time around. Pushed as build fixes. Daniel P. Berrangé (5): Fix syntax error with missing ; and too many ) Define virNetworkPortPtr typedef on old libvirt generator: fix naming of getter APIs for virNetworkPort sanitytest: add some special cases for virNetworkPort APIs Add missing impl of virNetworkListAllPorts generator.py | 3 +++ libvirt-override-virNetwork.py | 11 ++++++++ libvirt-override.c | 48 +++++++++++++++++++++++++++++++++- sanitytest.py | 5 +++- typewrappers.h | 3 +++ 5 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 libvirt-override-virNetwork.py -- 2.21.0

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- libvirt-override.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libvirt-override.c b/libvirt-override.c index ea14e1e..c73305b 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -10032,7 +10032,7 @@ libvirt_virNetworkPortGetParameters(PyObject *self ATTRIBUTE_UNUSED, if (rc < 0) return VIR_PY_NONE; - dict = getPyVirTypedParameter(params, nparams))) + dict = getPyVirTypedParameter(params, nparams); virTypedParamsFree(params, nparams); return dict; -- 2.21.0

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- typewrappers.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/typewrappers.h b/typewrappers.h index e4983b2..518ad00 100644 --- a/typewrappers.h +++ b/typewrappers.h @@ -30,6 +30,9 @@ typedef ssize_t Py_ssize_t; #if !LIBVIR_CHECK_VERSION(4, 5, 0) typedef struct _virNWFilterBinding *virNWFilterBindingPtr; #endif +#if !LIBVIR_CHECK_VERSION(5, 5, 0) +typedef struct _virNetworkPort *virNetworkPortPtr; +#endif #define PyvirConnect_Get(v) (((v) == Py_None) ? NULL : \ (((PyvirConnect_Object *)(v))->obj)) -- 2.21.0

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- generator.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/generator.py b/generator.py index ab5144d..9dedc18 100755 --- a/generator.py +++ b/generator.py @@ -1213,6 +1213,9 @@ def nameFixup(name, classe, type, file): elif name[0:9] == "virDomain": func = name[9:] func = func[0:1].lower() + func[1:] + elif name[0:17] == "virNetworkPortGet": + func = name[17:] + func = func[0:1].lower() + func[1:] elif name[0:13] == "virNetworkGet": func = name[13:] func = func[0:1].lower() + func[1:] -- 2.21.0

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- sanitytest.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sanitytest.py b/sanitytest.py index 68dde6b..9743f6f 100644 --- a/sanitytest.py +++ b/sanitytest.py @@ -220,7 +220,7 @@ for name in sorted(basicklassmap): # The object lifecycle APIs are irrelevant since they're # used inside the object constructors/destructors. - if func in ["Ref", "Free", "New", "GetConnect", "GetDomain"]: + if func in ["Ref", "Free", "New", "GetConnect", "GetDomain", "GetNetwork"]: if klass == "virStream" and func == "New": klass = "virConnect" func = "NewStream" @@ -272,6 +272,9 @@ for name in sorted(basicklassmap): elif klass == "virStorageVol" and func in ["StorageVolCreateXMLFrom", "StorageVolCreateXML"]: klass = "virStoragePool" func = func[10:] + elif klass == "virNetworkPort": + klass = "virNetwork" + func = func[7:] elif func == "StoragePoolLookupByVolume": klass = "virStorageVol" elif func == "StorageVolLookupByName": -- 2.21.0

This API needs manual impl as the generator cannot cope Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- libvirt-override-virNetwork.py | 11 ++++++++ libvirt-override.c | 46 ++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 libvirt-override-virNetwork.py diff --git a/libvirt-override-virNetwork.py b/libvirt-override-virNetwork.py new file mode 100644 index 0000000..749ee44 --- /dev/null +++ b/libvirt-override-virNetwork.py @@ -0,0 +1,11 @@ + def listAllPorts(self, flags=0): + """List all domains and returns a list of domain objects""" + ret = libvirtmod.virNetworkListAllPorts(self._o, flags) + if ret is None: + raise libvirtError("virNetworkListAllPorts() failed", conn=self) + + retlist = list() + for domptr in ret: + retlist.append(virNetwork(self, _obj=domptr)) + + return retlist diff --git a/libvirt-override.c b/libvirt-override.c index c73305b..5ae4406 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -9946,6 +9946,51 @@ libvirt_virNodeGetSEVInfo(PyObject *self ATTRIBUTE_UNUSED, #endif /* LIBVIR_CHECK_VERSION(4, 5, 0) */ #if LIBVIR_CHECK_VERSION(5, 5, 0) +static PyObject * +libvirt_virNetworkListAllPorts(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ + PyObject *pyobj_conn; + PyObject *py_retval = NULL; + virNetworkPtr conn; + virNetworkPortPtr *doms = NULL; + int c_retval = 0; + ssize_t i; + unsigned int flags; + + if (!PyArg_ParseTuple(args, (char *)"OI:virNetworkListAllPorts", + &pyobj_conn, &flags)) + return NULL; + conn = (virNetworkPtr) PyvirNetwork_Get(pyobj_conn); + + LIBVIRT_BEGIN_ALLOW_THREADS; + c_retval = virNetworkListAllPorts(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++) { + VIR_PY_LIST_SET_GOTO(py_retval, i, libvirt_virNetworkPortPtrWrap(doms[i]), error); + /* python steals the pointer */ + doms[i] = NULL; + } + + cleanup: + for (i = 0; i < c_retval; i++) + if (doms[i]) + virNetworkPortFree(doms[i]); + VIR_FREE(doms); + return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; +} + static PyObject * libvirt_virNetworkPortSetParameters(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) @@ -10286,6 +10331,7 @@ static PyMethodDef libvirtMethods[] = { {(char *) "virNodeGetSEVInfo", libvirt_virNodeGetSEVInfo, METH_VARARGS, NULL}, #endif /* LIBVIR_CHECK_VERSION(4, 5, 0) */ #if LIBVIR_CHECK_VERSION(5, 5, 0) + {(char *) "virNetworkListAllPorts", libvirt_virNetworkListAllPorts, METH_VARARGS, NULL}, {(char *) "virNetworkPortSetParameters", libvirt_virNetworkPortSetParameters, METH_VARARGS, NULL}, {(char *) "virNetworkPortGetParameters", libvirt_virNetworkPortGetParameters, METH_VARARGS, NULL}, #endif /* LIBVIR_CHECK_VERSION(5, 5, 0) */ -- 2.21.0
participants (1)
-
Daniel P. Berrangé