[libvirt] [PATCHv2 6/8] python: Use a pure python implementation of 'vir*GetConnect'

Cole Robinson crobinso at redhat.com
Fri Oct 2 17:46:51 UTC 2009


The API docs explictly warn that we shouldn't use the C vir*GetConnect calls
in bindings: doing so can close the internal connection pointer and cause
things to get screwy. Implement these calls in python.

Signed-off-by: Cole Robinson <crobinso at redhat.com>
---
 python/generator.py |   21 +++++++++++++++++++++
 1 files changed, 21 insertions(+), 0 deletions(-)

diff --git a/python/generator.py b/python/generator.py
index 437de0c..de5507e 100755
--- a/python/generator.py
+++ b/python/generator.py
@@ -343,6 +343,16 @@ skip_function = (
     "virSecretRef",
     "virStoragePoolRef",
     "virStorageVolRef",
+
+    # This functions shouldn't be called via the bindings (and even the docs
+    # contain an explicit warning to that effect). The equivalent should be
+    # implemented in pure python for each class
+    "virDomainGetConnect",
+    "virInterfaceGetConnect",
+    "virNetworkGetConnect",
+    "virSecretGetConnect",
+    "virStoragePoolGetConnect",
+    "virStorageVolGetConnect",
 )
 
 
@@ -641,6 +651,11 @@ classes_destructors = {
     #"virStream": "virStreamFree",
 }
 
+class_skip_connect_impl = {
+    "virConnect" : True
+}
+
+
 functions_noexcept = {
     'virDomainGetID': True,
     'virDomainGetName': True,
@@ -1065,6 +1080,12 @@ def buildWrappers():
 			      classes_destructors[classname]);
 		classes.write("        self._o = None\n\n");
 		destruct=classes_destructors[classname]
+
+            if not class_skip_connect_impl.has_key(classname):
+                # Build python safe 'connect' method
+                classes.write("    def connect(self):\n")
+                classes.write("        return self._conn\n\n")
+
 	    flist = function_classes[classname]
 	    flist.sort(functionCompare)
 	    oldfile = ""
-- 
1.6.5.rc2




More information about the libvir-list mailing list