[libvirt] [PATCH python 0/7] Remove unused code from generator

All this functionality is inherited from libxml, but is not required to generate libvirt python bindings. Daniel P. Berrange (7): Removed unused 'reference_keepers' code from generator Removed unused 'function_post' code from generator Removed unused 'foreign_encoding_args' code from generator Removed unused 'py_return_types' code from generator Removed unused 'classes_ancestor' code from generator Removed unused 'converter_type' code from generator Removed unused 'functions_list_exception_test' code from generator generator.py | 170 +++++++++++------------------------------------------------ 1 file changed, 30 insertions(+), 140 deletions(-) -- 2.9.3

The 'reference_keepers' data structure and associated code in the generator is inherited from libxml. This has never been used in libvirt, so delete it to simplify the generator. Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- generator.py | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/generator.py b/generator.py index 6bcf80b..9c59ec0 100755 --- a/generator.py +++ b/generator.py @@ -1074,9 +1074,6 @@ functions_noexcept = { 'virNWFilterGetName': True, } -reference_keepers = { -} - function_classes = {} function_classes["None"] = [] @@ -1500,10 +1497,6 @@ def buildWrappers(module): classes.write("class %s(%s):\n" % (classname, classes_ancestor[classname])) classes.write(" def __init__(self, _obj=None):\n") - if classname in reference_keepers: - rlist = reference_keepers[classname] - for ref in rlist: - classes.write(" self.%s = None\n" % ref[1]) classes.write(" self._o = _obj\n") classes.write(" %s.__init__(self, _obj=_obj)\n\n" % ( classes_ancestor[classname])) @@ -1517,10 +1510,6 @@ def buildWrappers(module): classes.write(" def __init__(self, dom, _obj=None):\n") else: classes.write(" def __init__(self, _obj=None):\n") - if classname in reference_keepers: - rlist = reference_keepers[classname] - for ref in rlist: - classes.write(" self.%s = None\n" % ref[1]) if classname in [ "virDomain", "virNetwork", "virInterface", "virNodeDevice", "virSecret", "virStream", "virNWFilter" ]: @@ -1673,19 +1662,6 @@ def buildWrappers(module): classes.write(classes_type[ret[0]][1] % ("ret")) classes.write("\n") - # - # Sometime one need to keep references of the source - # class in the returned class object. - # See reference_keepers for the list - # - tclass = classes_type[ret[0]][2] - if tclass in reference_keepers: - rlist = reference_keepers[tclass] - for pref in rlist: - if pref[0] == classname: - classes.write(" __tmp.%s = self\n" % - pref[1]) - # Post-processing - just before we return. if name in function_post: classes.write(" %s\n" % -- 2.9.3

The 'function_post' data structure and associated code in the generator is inherited from libxml. This has never been used in libvirt, so delete it to simplify the generator. Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- generator.py | 28 ---------------------------- 1 file changed, 28 deletions(-) diff --git a/generator.py b/generator.py index 9c59ec0..3dce74b 100755 --- a/generator.py +++ b/generator.py @@ -1078,8 +1078,6 @@ function_classes = {} function_classes["None"] = [] -function_post = {} - # Functions returning an integral type which need special rules to # check for errors and raise exceptions. functions_int_exception_test = { @@ -1662,11 +1660,6 @@ def buildWrappers(module): classes.write(classes_type[ret[0]][1] % ("ret")) classes.write("\n") - # Post-processing - just before we return. - if name in function_post: - classes.write(" %s\n" % - (function_post[name])) - # # return the class # @@ -1679,11 +1672,6 @@ def buildWrappers(module): classes.write( " if ret is None:return None") - # Post-processing - just before we return. - if name in function_post: - classes.write(" %s\n" % - (function_post[name])) - classes.write(" return ") classes.write(converter_type[ret[0]] % ("ret")) classes.write("\n") @@ -1726,11 +1714,6 @@ def buildWrappers(module): ": raise libvirtError ('%s() failed')\n") % ("ret", name)) - # Post-processing - just before we return. - if name in function_post: - classes.write(" %s\n" % - (function_post[name])) - classes.write (" return ret\n") elif is_python_noninteger_type (ret[0]): @@ -1768,19 +1751,8 @@ def buildWrappers(module): ": raise libvirtError ('%s() failed')\n") % ("ret", name)) - # Post-processing - just before we return. - if name in function_post: - classes.write(" %s\n" % - (function_post[name])) - classes.write (" return ret\n") - else: - # Post-processing - just before we return. - if name in function_post: - classes.write(" %s\n" % - (function_post[name])) - classes.write(" return ret\n") classes.write("\n") -- 2.9.3

The 'foreign_encoding_args' data structure and associated code in the generator is inherited from libxml. This has never been used in libvirt, so delete it to simplify the generator. Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- generator.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/generator.py b/generator.py index 3dce74b..decda72 100755 --- a/generator.py +++ b/generator.py @@ -370,9 +370,6 @@ py_return_types = { unknown_types = {} -foreign_encoding_args = ( -) - ####################################################################### # # This part writes the C <-> Python stubs libvirt.[ch] and @@ -693,8 +690,6 @@ def print_function_wrapper(module, name, output, export, include): c_args = c_args + " %s %s;\n" % (arg[1], arg[0]) if arg[1] in py_types: (f, t, n, c) = py_types[arg[1]] - if (f == 'z') and (name in foreign_encoding_args) and (num_bufs == 0): - f = 't#' if f is not None: format = format + f if t is not None: -- 2.9.3

The 'py_return_types' data structure and associated code in the generator is inherited from libxml. This has never been used in libvirt, so delete it to simplify the generator. Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- generator.py | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/generator.py b/generator.py index decda72..8998b53 100755 --- a/generator.py +++ b/generator.py @@ -365,9 +365,6 @@ py_types = { 'const virDomainSnapshot *': ('O', "virDomainSnapshot", "virDomainSnapshotPtr", "virDomainSnapshotPtr"), } -py_return_types = { -} - unknown_types = {} ####################################################################### @@ -743,14 +740,6 @@ def print_function_wrapper(module, name, output, export, include): if n == "charPtr": ret_convert = ret_convert + " free(c_retval);\n" ret_convert = ret_convert + " return py_retval;\n" - elif ret[0] in py_return_types: - (f, t, n, c) = py_return_types[ret[0]] - c_return = " %s c_retval;\n" % (ret[0]) - c_call = "\n c_retval = %s(%s);\n" % (name, c_call) - ret_convert = " py_retval = libvirt_%sWrap((%s) c_retval);\n" % (n,c) - if n == "charPtr": - ret_convert = ret_convert + " free(c_retval);\n" - ret_convert = ret_convert + " return py_retval;\n" else: if ret[0] in skipped_types: return 0 @@ -863,7 +852,6 @@ def print_c_pointer(classname, output, export, include): def buildStubs(module, api_xml): global py_types - global py_return_types global unknown_types global onlyOverrides @@ -1290,7 +1278,6 @@ def writeDoc(module, name, args, indent, output): def buildWrappers(module): global ctypes global py_types - global py_return_types global unknown_types global functions global function_classes -- 2.9.3

The 'classes_ancestor' data structure and associated code in the generator is inherited from libxml. This has never been used in libvirt, so delete it to simplify the generator. Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- generator.py | 56 ++++++++++++++++++++++---------------------------------- 1 file changed, 22 insertions(+), 34 deletions(-) diff --git a/generator.py b/generator.py index 8998b53..3d2e05e 100755 --- a/generator.py +++ b/generator.py @@ -1017,9 +1017,6 @@ primary_classes = ["virDomain", "virNetwork", "virInterface", "virConnect", "virNodeDevice", "virSecret", "virNWFilter", "virStream", "virDomainSnapshot"] -classes_ancestor = { -} - classes_destructors = { "virDomain": "virDomainFree", "virNetwork": "virNetworkFree", @@ -1284,7 +1281,6 @@ def buildWrappers(module): global classes_type global classes_list global primary_classes - global classes_ancestor global converter_type global classes_destructors global functions_noexcept @@ -1473,37 +1469,29 @@ def buildWrappers(module): if classname == "None": pass else: - if classname in classes_ancestor: - classes.write("class %s(%s):\n" % (classname, - classes_ancestor[classname])) - classes.write(" def __init__(self, _obj=None):\n") - classes.write(" self._o = _obj\n") - classes.write(" %s.__init__(self, _obj=_obj)\n\n" % ( - classes_ancestor[classname])) + classes.write("class %s(object):\n" % (classname)) + if classname in [ "virDomain", "virNetwork", "virInterface", "virStoragePool", + "virStorageVol", "virNodeDevice", "virSecret","virStream", + "virNWFilter" ]: + classes.write(" def __init__(self, conn, _obj=None):\n") + elif classname in [ 'virDomainSnapshot' ]: + classes.write(" def __init__(self, dom, _obj=None):\n") else: - classes.write("class %s(object):\n" % (classname)) - if classname in [ "virDomain", "virNetwork", "virInterface", "virStoragePool", - "virStorageVol", "virNodeDevice", "virSecret","virStream", - "virNWFilter" ]: - classes.write(" def __init__(self, conn, _obj=None):\n") - elif classname in [ 'virDomainSnapshot' ]: - classes.write(" def __init__(self, dom, _obj=None):\n") - else: - classes.write(" def __init__(self, _obj=None):\n") - if classname in [ "virDomain", "virNetwork", "virInterface", - "virNodeDevice", "virSecret", "virStream", - "virNWFilter" ]: - classes.write(" self._conn = conn\n") - elif classname in [ "virStorageVol", "virStoragePool" ]: - classes.write(" self._conn = conn\n" + \ - " if not isinstance(conn, virConnect):\n" + \ - " self._conn = conn._conn\n") - elif classname in [ "virDomainSnapshot" ]: - classes.write(" self._dom = dom\n") - classes.write(" self._conn = dom.connect()\n") - classes.write(" if type(_obj).__name__ not in [\"PyCapsule\", \"PyCObject\"]:\n") - classes.write(" raise Exception(\"Expected a wrapped C Object but got %s\" % type(_obj))\n") - classes.write(" self._o = _obj\n\n") + classes.write(" def __init__(self, _obj=None):\n") + if classname in [ "virDomain", "virNetwork", "virInterface", + "virNodeDevice", "virSecret", "virStream", + "virNWFilter" ]: + classes.write(" self._conn = conn\n") + elif classname in [ "virStorageVol", "virStoragePool" ]: + classes.write(" self._conn = conn\n" + \ + " if not isinstance(conn, virConnect):\n" + \ + " self._conn = conn._conn\n") + elif classname in [ "virDomainSnapshot" ]: + classes.write(" self._dom = dom\n") + classes.write(" self._conn = dom.connect()\n") + classes.write(" if type(_obj).__name__ not in [\"PyCapsule\", \"PyCObject\"]:\n") + classes.write(" raise Exception(\"Expected a wrapped C Object but got %s\" % type(_obj))\n") + classes.write(" self._o = _obj\n\n") destruct=None if classname in classes_destructors: classes.write(" def __del__(self):\n") -- 2.9.3

The 'converter_type' data structure and associated code in the generator is inherited from libxml. This has never been used in libvirt, so delete it to simplify the generator. Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- generator.py | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/generator.py b/generator.py index 3d2e05e..cf3759c 100755 --- a/generator.py +++ b/generator.py @@ -1009,9 +1009,6 @@ classes_type = { "virDomainSnapshot *": ("._o", "virDomainSnapshot(self, _obj=%s)", "virDomainSnapshot"), } -converter_type = { -} - primary_classes = ["virDomain", "virNetwork", "virInterface", "virStoragePool", "virStorageVol", "virConnect", "virNodeDevice", "virSecret", @@ -1281,7 +1278,6 @@ def buildWrappers(module): global classes_type global classes_list global primary_classes - global converter_type global classes_destructors global functions_noexcept @@ -1634,17 +1630,6 @@ def buildWrappers(module): # return the class # classes.write(" return __tmp\n") - elif ret[0] in converter_type: - # - # Raise an exception - # - if name in functions_noexcept: - classes.write( - " if ret is None:return None") - - classes.write(" return ") - classes.write(converter_type[ret[0]] % ("ret")) - classes.write("\n") # For functions returning an integral type there # are several things that we can do, depending on -- 2.9.3

The 'functions_list_exception_test' data structure and associated code in the generator is inherited from libxml. This has never been used in libvirt, so delete it to simplify the generator. Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- generator.py | 29 ++++++++--------------------- 1 file changed, 8 insertions(+), 21 deletions(-) diff --git a/generator.py b/generator.py index cf3759c..5dfa73e 100755 --- a/generator.py +++ b/generator.py @@ -1067,11 +1067,6 @@ def is_integral_type (name): def is_optional_arg(info): return re.search("^\(?optional\)?", info) is not None -# Functions returning lists which need special rules to check for errors -# and raise exceptions. -functions_list_exception_test = { -} -functions_list_default_test = "%s is None" def is_python_noninteger_type (name): @@ -1447,11 +1442,7 @@ def buildWrappers(module): elif is_python_noninteger_type (ret[0]): if name not in functions_noexcept: - if name in functions_list_exception_test: - test = functions_list_exception_test[name] - else: - test = functions_list_default_test - classes.write ((" if " + test + + classes.write ((" if %s is None" + ": raise libvirtError ('%s() failed')\n") % ("ret", name)) classes.write(" return ret\n") @@ -1673,36 +1664,32 @@ def buildWrappers(module): elif is_python_noninteger_type (ret[0]): if name not in functions_noexcept: - if name in functions_list_exception_test: - test = functions_list_exception_test[name] - else: - test = functions_list_default_test if classname == "virConnect": - classes.write ((" if " + test + + classes.write ((" if %s is None" + ": raise libvirtError ('%s() failed', conn=self)\n") % ("ret", name)) elif classname == "virDomain": - classes.write ((" if " + test + + classes.write ((" if %s is None" + ": raise libvirtError ('%s() failed', dom=self)\n") % ("ret", name)) elif classname == "virNetwork": - classes.write ((" if " + test + + classes.write ((" if %s is None" + ": raise libvirtError ('%s() failed', net=self)\n") % ("ret", name)) elif classname == "virInterface": - classes.write ((" if " + test + + classes.write ((" if %s is None" + ": raise libvirtError ('%s() failed', net=self)\n") % ("ret", name)) elif classname == "virStoragePool": - classes.write ((" if " + test + + classes.write ((" if %s is None" + ": raise libvirtError ('%s() failed', pool=self)\n") % ("ret", name)) elif classname == "virStorageVol": - classes.write ((" if " + test + + classes.write ((" if %s is None" + ": raise libvirtError ('%s() failed', vol=self)\n") % ("ret", name)) else: - classes.write ((" if " + test + + classes.write ((" if %s is None" + ": raise libvirtError ('%s() failed')\n") % ("ret", name)) -- 2.9.3

ping On Thu, Jan 19, 2017 at 03:31:20PM +0000, Daniel P. Berrange wrote:
All this functionality is inherited from libxml, but is not required to generate libvirt python bindings.
Daniel P. Berrange (7): Removed unused 'reference_keepers' code from generator Removed unused 'function_post' code from generator Removed unused 'foreign_encoding_args' code from generator Removed unused 'py_return_types' code from generator Removed unused 'classes_ancestor' code from generator Removed unused 'converter_type' code from generator Removed unused 'functions_list_exception_test' code from generator
generator.py | 170 +++++++++++------------------------------------------------ 1 file changed, 30 insertions(+), 140 deletions(-)
Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://entangle-photo.org -o- http://search.cpan.org/~danberr/ :|
participants (2)
-
Daniel P. Berrange
-
Pavel Hrdina