[libvirt] PATCH: Impl python bindings for virInterface

We forgot that adding the virInterface APIs would break the build of the python bindings. Here is the patch to wire up the code generator for the new APIs. This is actually surprisingly easy, since we ditched the raw unsigned char MAC address APIs, no special cases were needed. Daniel Index: generator.py =================================================================== RCS file: /data/cvs/libvirt/python/generator.py,v retrieving revision 1.42 diff -u -p -r1.42 generator.py --- generator.py 1 Apr 2009 10:39:12 -0000 1.42 +++ generator.py 20 May 2009 16:43:58 -0000 @@ -246,6 +246,11 @@ py_types = { 'virNetwork *': ('O', "virNetwork", "virNetworkPtr", "virNetworkPtr"), 'const virNetwork *': ('O', "virNetwork", "virNetworkPtr", "virNetworkPtr"), + 'virInterfacePtr': ('O', "virInterface", "virInterfacePtr", "virInterfacePtr"), + 'const virInterfacePtr': ('O', "virInterface", "virInterfacePtr", "virInterfacePtr"), + 'virInterface *': ('O', "virInterface", "virInterfacePtr", "virInterfacePtr"), + 'const virInterface *': ('O', "virInterface", "virInterfacePtr", "virInterfacePtr"), + 'virStoragePoolPtr': ('O', "virStoragePool", "virStoragePoolPtr", "virStoragePoolPtr"), 'const virStoragePoolPtr': ('O', "virStoragePool", "virStoragePoolPtr", "virStoragePoolPtr"), 'virStoragePool *': ('O', "virStoragePool", "virStoragePoolPtr", "virStoragePoolPtr"), @@ -289,6 +294,8 @@ skip_impl = ( 'virConnectListDefinedDomains', 'virConnectListNetworks', 'virConnectListDefinedNetworks', + 'virConnectListInterfaces', + 'virConnectListDefinedInterfaces', 'virConnectListStoragePools', 'virConnectListDefinedStoragePools', 'virConnectListStorageVols', @@ -608,6 +615,8 @@ classes_type = { "virDomain *": ("._o", "virDomain(self, _obj=%s)", "virDomain"), "virNetworkPtr": ("._o", "virNetwork(self, _obj=%s)", "virNetwork"), "virNetwork *": ("._o", "virNetwork(self, _obj=%s)", "virNetwork"), + "virInterfacePtr": ("._o", "virInterface(self, _obj=%s)", "virInterface"), + "virInterface *": ("._o", "virInterface(self, _obj=%s)", "virInterface"), "virStoragePoolPtr": ("._o", "virStoragePool(self, _obj=%s)", "virStoragePool"), "virStoragePool *": ("._o", "virStoragePool(self, _obj=%s)", "virStoragePool"), "virStorageVolPtr": ("._o", "virStorageVol(self, _obj=%s)", "virStorageVol"), @@ -621,7 +630,8 @@ classes_type = { converter_type = { } -primary_classes = ["virDomain", "virNetwork", "virStoragePool", "virStorageVol", +primary_classes = ["virDomain", "virNetwork", "virInterface", + "virStoragePool", "virStorageVol", "virConnect", "virNodeDevice" ] classes_ancestor = { @@ -629,6 +639,7 @@ classes_ancestor = { classes_destructors = { "virDomain": "virDomainFree", "virNetwork": "virNetworkFree", + "virInterface": "virInterfaceFree", "virStoragePool": "virStoragePoolFree", "virStorageVol": "virStorageVolFree", "virNodeDevice" : "virNodeDeviceFree" @@ -638,6 +649,7 @@ functions_noexcept = { 'virDomainGetID': True, 'virDomainGetName': True, 'virNetworkGetName': True, + 'virInterfaceGetName': True, 'virStoragePoolGetName': True, 'virStorageVolGetName': True, 'virStorageVolGetkey': True, @@ -690,6 +702,15 @@ def nameFixup(name, classe, type, file): elif name[0:16] == "virNetworkLookup": func = name[3:] func = string.lower(func[0:1]) + func[1:] + elif name[0:18] == "virInterfaceDefine": + func = name[3:] + func = string.lower(func[0:1]) + func[1:] + elif name[0:21] == "virInterfaceCreateXML": + func = name[3:] + func = string.lower(func[0:1]) + func[1:] + elif name[0:18] == "virInterfaceLookup": + func = name[3:] + func = string.lower(func[0:1]) + func[1:] elif name[0:20] == "virStoragePoolDefine": func = name[3:] func = string.lower(func[0:1]) + func[1:] @@ -717,6 +738,12 @@ def nameFixup(name, classe, type, file): elif name[0:10] == "virNetwork": func = name[10:] func = string.lower(func[0:1]) + func[1:] + elif name[0:15] == "virInterfaceGet": + func = name[13:] + func = string.lower(func[0:1]) + func[1:] + elif name[0:12] == "virInterface": + func = name[10:] + func = string.lower(func[0:1]) + func[1:] elif name[0:17] == "virStoragePoolGet": func = name[17:] func = string.lower(func[0:1]) + func[1:] @@ -988,7 +1015,7 @@ def buildWrappers(): else: txt.write("Class %s()\n" % (classname)) classes.write("class %s:\n" % (classname)) - if classname in [ "virDomain", "virNetwork", "virStoragePool", "virStorageVol", "virNodeDevice" ]: + if classname in [ "virDomain", "virNetwork", "virInterface", "virStoragePool", "virStorageVol", "virNodeDevice" ]: classes.write(" def __init__(self, conn, _obj=None):\n") else: classes.write(" def __init__(self, _obj=None):\n") @@ -996,7 +1023,7 @@ def buildWrappers(): list = reference_keepers[classname] for ref in list: classes.write(" self.%s = None\n" % ref[1]) - if classname in [ "virDomain", "virNetwork", "virNodeDevice" ]: + if classname in [ "virDomain", "virNetwork", "virInterface", "virNodeDevice" ]: classes.write(" self._conn = conn\n") elif classname in [ "virStorageVol", "virStoragePool" ]: classes.write(" self._conn = conn\n" + \ @@ -1097,6 +1124,10 @@ def buildWrappers(): classes.write( " if ret is None:raise libvirtError('%s() failed', net=self)\n" % (name)) + elif classname == "virInterface": + classes.write( + " if ret is None:raise libvirtError('%s() failed', net=self)\n" % + (name)) elif classname == "virStoragePool": classes.write( " if ret is None:raise libvirtError('%s() failed', pool=self)\n" % @@ -1177,6 +1208,10 @@ def buildWrappers(): classes.write ((" if " + test + ": raise libvirtError ('%s() failed', net=self)\n") % ("ret", name)) + elif classname == "virInterface": + classes.write ((" if " + test + + ": raise libvirtError ('%s() failed', net=self)\n") % + ("ret", name)) elif classname == "virStoragePool": classes.write ((" if " + test + ": raise libvirtError ('%s() failed', pool=self)\n") % @@ -1215,6 +1250,10 @@ def buildWrappers(): classes.write ((" if " + test + ": raise libvirtError ('%s() failed', net=self)\n") % ("ret", name)) + elif classname == "virInterface": + classes.write ((" if " + test + + ": raise libvirtError ('%s() failed', net=self)\n") % + ("ret", name)) elif classname == "virStoragePool": classes.write ((" if " + test + ": raise libvirtError ('%s() failed', pool=self)\n") % Index: libvirt_wrap.h =================================================================== RCS file: /data/cvs/libvirt/python/libvirt_wrap.h,v retrieving revision 1.15 diff -u -p -r1.15 libvirt_wrap.h --- libvirt_wrap.h 24 Nov 2008 19:28:12 -0000 1.15 +++ libvirt_wrap.h 20 May 2009 16:43:58 -0000 @@ -48,6 +48,15 @@ typedef struct { } PyvirNetwork_Object; +#define PyvirInterface_Get(v) (((v) == Py_None) ? NULL : \ + (((PyvirInterface_Object *)(v))->obj)) + +typedef struct { + PyObject_HEAD + virInterfacePtr obj; +} PyvirInterface_Object; + + #define PyvirStoragePool_Get(v) (((v) == Py_None) ? NULL : \ (((PyvirStoragePool_Object *)(v))->obj)) @@ -118,6 +127,7 @@ PyObject * libvirt_charPtrConstWrap(cons PyObject * libvirt_virConnectPtrWrap(virConnectPtr node); PyObject * libvirt_virDomainPtrWrap(virDomainPtr node); PyObject * libvirt_virNetworkPtrWrap(virNetworkPtr node); +PyObject * libvirt_virInterfacePtrWrap(virInterfacePtr node); PyObject * libvirt_virStoragePoolPtrWrap(virStoragePoolPtr node); PyObject * libvirt_virStorageVolPtrWrap(virStorageVolPtr node); PyObject * libvirt_virEventHandleCallbackWrap(virEventHandleCallback node); Index: types.c =================================================================== RCS file: /data/cvs/libvirt/python/types.c,v retrieving revision 1.17 diff -u -p -r1.17 types.c --- types.c 18 Dec 2008 12:25:11 -0000 1.17 +++ types.c 20 May 2009 16:43:58 -0000 @@ -119,6 +119,21 @@ libvirt_virNetworkPtrWrap(virNetworkPtr } PyObject * +libvirt_virInterfacePtrWrap(virInterfacePtr node) +{ + PyObject *ret; + + if (node == NULL) { + Py_INCREF(Py_None); + return (Py_None); + } + ret = + PyCObject_FromVoidPtrAndDesc((void *) node, (char *) "virInterfacePtr", + NULL); + return (ret); +} + +PyObject * libvirt_virStoragePoolPtrWrap(virStoragePoolPtr node) { PyObject *ret; -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|

On Wed, May 20, 2009 at 05:45:36PM +0100, Daniel P. Berrange wrote:
We forgot that adding the virInterface APIs would break the build of the python bindings. Here is the patch to wire up the code generator for the new APIs. This is actually surprisingly easy, since we ditched the raw unsigned char MAC address APIs, no special cases were needed.
Looks fine, ACK ! thanks, I missed that before the commit ! Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@veillard.com | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/

On 05/21/2009 03:49 AM, Daniel Veillard wrote:
On Wed, May 20, 2009 at 05:45:36PM +0100, Daniel P. Berrange wrote:
We forgot that adding the virInterface APIs would break the build of the python bindings. Here is the patch to wire up the code generator for the new APIs. This is actually surprisingly easy, since we ditched the raw unsigned char MAC address APIs, no special cases were needed.
Looks fine, ACK !
thanks, I missed that before the commit !
And I'll echo that thanks, since doing this really should have been my responsibility.

On Thu, May 21, 2009 at 10:09:08AM -0400, Laine Stump wrote:
On 05/21/2009 03:49 AM, Daniel Veillard wrote:
On Wed, May 20, 2009 at 05:45:36PM +0100, Daniel P. Berrange wrote:
We forgot that adding the virInterface APIs would break the build of the python bindings. Here is the patch to wire up the code generator for the new APIs. This is actually surprisingly easy, since we ditched the raw unsigned char MAC address APIs, no special cases were needed.
Looks fine, ACK !
thanks, I missed that before the commit !
And I'll echo that thanks, since doing this really should have been my responsibility.
No problem - its all committed now. Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|
participants (3)
-
Daniel P. Berrange
-
Daniel Veillard
-
Laine Stump