[libvirt] [RFC/PATCH python] expose the bindings version to Python

Doug Goldstein cardoe at cardoe.com
Thu Dec 12 03:43:01 UTC 2013


The method getVersion() retrieves the version of the libvirt library
that the binaries are linked against but there is no way to retrieve the
version of the bindings you are using. In the future if we support new
APIs in Python that don't rely on features in the library there needs to
be a way for programmers to detect the version.
---
I would expect there's a cleaner way to implement this than I've done
but I opted for what I saw as the smallest implementation. If anyone
has a suggestion for a better way to do this I'm ok with redoing this
patch.
---
 libvirt-override.py |  3 +++
 setup.py            | 16 ++++++++++++++++
 2 files changed, 19 insertions(+)

diff --git a/libvirt-override.py b/libvirt-override.py
index 63f8ecb..ed8f73a 100644
--- a/libvirt-override.py
+++ b/libvirt-override.py
@@ -2,6 +2,9 @@
 # Manually written part of python bindings for libvirt
 #
 
+__version__ = '@VERSION@'
+version = @VER_TUPLE@
+
 # On cygwin, the DLL is called cygvirtmod.dll
 import sys
 
diff --git a/setup.py b/setup.py
index 24d4cf2..ad4f406 100755
--- a/setup.py
+++ b/setup.py
@@ -119,6 +119,21 @@ if have_libvirt_lxc:
 
 class my_build(build):
 
+    def gen_version(self, filename):
+        os.rename(filename, filename + '.tmp')
+
+        version = self.distribution.get_version()
+        ver_tuple = tuple(int(x) for x in version.split('.'))
+
+        f1 = open(filename + '.tmp', 'r')
+        f2 = open(filename, 'w')
+        for line in f1:
+            f2.write(line
+                    .replace('@VER_TUPLE@', str(ver_tuple))
+                    .replace('@VERSION@', version))
+        f1.close()
+        f2.close()
+
     def run(self):
         apis = get_api_xml_files()
 
@@ -127,6 +142,7 @@ class my_build(build):
         if have_libvirt_lxc:
             self.spawn([sys.executable, "generator.py", "libvirt-lxc", apis[2]])
 
+        self.gen_version('build/libvirt.py')
         build.run(self)
 
 class my_sdist(sdist):
-- 
1.8.3.2




More information about the libvir-list mailing list