[libvirt] PATCH: Impl python bindings for virInterface

Daniel P. Berrange berrange at redhat.com
Wed May 20 16:45:36 UTC 2009


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 :|




More information about the libvir-list mailing list