* Put import clause in front of global variables * Sink __name__ == "__main__" to the bottom of this script and support "import generator" * Remove "quiet" and "debug" global variables and use stubs_buiding_debug and xml_parsing_debug variable instead --- python/generator.py | 105 +++++++++++++++++++++++++++------------------------- 1 file changed, 54 insertions(+), 51 deletions(-) diff --git a/python/generator.py b/python/generator.py index e4c9579..246767c 100755 --- a/python/generator.py +++ b/python/generator.py @@ -3,31 +3,20 @@ # generate python wrappers from the XML API description # -functions = {} -lxc_functions = {} -qemu_functions = {} -enums = {} # { enumType: { enumConstant: enumValue } } -lxc_enums = {} # { enumType: { enumConstant: enumValue } } -qemu_enums = {} # { enumType: { enumConstant: enumValue } } - import os import sys import string import re -quiet=True +from xml.sax import ContentHandler +from xml.sax import make_parser -if __name__ == "__main__": - # launched as a script - srcPref = os.path.dirname(sys.argv[0]) - if len(sys.argv) > 1: - python = sys.argv[1] - else: - print "Python binary not specified" - sys.exit(1) -else: - # imported - srcPref = os.path.dirname(__file__) +functions = {} +lxc_functions = {} +qemu_functions = {} +enums = {} # { enumType: { enumConstant: enumValue } } +lxc_enums = {} # { enumType: { enumConstant: enumValue } } +qemu_enums = {} # { enumType: { enumConstant: enumValue } } ####################################################################### # @@ -35,20 +24,17 @@ else: # libvirt API description # ####################################################################### -import os -import xml.sax -debug = 0 - -def getparser(): +def getparser(debug): # Attach parser to an unmarshalling object. return both objects. - target = docParser() - parser = xml.sax.make_parser() + target = docParser(debug) + parser = make_parser() parser.setContentHandler(target) return parser, target -class docParser(xml.sax.handler.ContentHandler): - def __init__(self): +class docParser(ContentHandler): + def __init__(self, debug = False): + self.debug = debug; self._methodname = None self._data = [] self.in_function = 0 @@ -58,24 +44,24 @@ class docParser(xml.sax.handler.ContentHandler): self.characters = self.data def close(self): - if debug: + if self.debug: print "close" def getmethodname(self): return self._methodname def data(self, text): - if debug: + if self.debug: print "data %s" % text self._data.append(text) def cdata(self, text): - if debug: + if self.debug: print "data %s" % text self._data.append(text) def start(self, tag, attrs): - if debug: + if self.debug: print "start %s, %s" % (tag, attrs) if tag == 'function': self._data = [] @@ -132,7 +118,7 @@ class docParser(xml.sax.handler.ContentHandler): qemu_enum(attrs['type'],attrs['name'],attrs['value']) def end(self, tag): - if debug: + if self.debug: print "end %s" % tag if tag == 'function': # fuctions come from source files, hence 'virerror.c' @@ -779,7 +765,7 @@ def print_function_wrapper(module, name, output, export, include): return 0 return 1 -def buildStubs(module): +def buildStubs(module, stubs_buiding_debug = False, xml_parsing_debug = False): global py_types global py_return_types global unknown_types @@ -806,14 +792,14 @@ def buildStubs(module): try: f = open(os.path.join(srcPref,api_xml)) data = f.read() - (parser, target) = getparser() + (parser, target) = getparser(xml_parsing_debug) parser.feed(data) parser.close() except IOError, msg: try: f = open(os.path.join(srcPref,"..","docs",api_xml)) data = f.read() - (parser, target) = getparser() + (parser, target) = getparser(xml_parsing_debug) parser.feed(data) parser.close() except IOError, msg: @@ -821,7 +807,7 @@ def buildStubs(module): sys.exit(1) n = len(funcs.keys()) - if not quiet: + if stubs_buiding_debug: print "Found %d functions in %s" % ((n), api_xml) override_api_xml = "%s-override-api.xml" % module @@ -830,13 +816,13 @@ def buildStubs(module): try: f = open(os.path.join(srcPref, override_api_xml)) data = f.read() - (parser, target) = getparser() + (parser, target) = getparser(xml_parsing_debug) parser.feed(data) parser.close() except IOError, msg: print file, ":", msg - if not quiet: + if stubs_buiding_debug: # XXX: This is not right, same function already in @functions # will be overwritten. print "Found %d functions in %s" % ((len(funcs.keys()) - n), override_api_xml) @@ -879,7 +865,7 @@ def buildStubs(module): export.close() wrapper.close() - if not quiet: + if stubs_buiding_debug: print "Generated %d wrapper functions" % nb_wrap if unknown_types: @@ -1955,15 +1941,32 @@ def lxcBuildWrappers(module): fd.close() +if __name__ == "__main__": + # launched as a script -quiet = 0 -if buildStubs("libvirt") < 0: - sys.exit(1) -if buildStubs("libvirt-lxc") < 0: - sys.exit(1) -if buildStubs("libvirt-qemu") < 0: - sys.exit(1) -buildWrappers("libvirt") -lxcBuildWrappers("libvirt-lxc") -qemuBuildWrappers("libvirt-qemu") -sys.exit(0) + stubs_buiding_debug = False + xml_parsing_debug = False + + srcPref = os.path.dirname(sys.argv[0]) + if len(sys.argv) > 1: + python = sys.argv[1] + else: + print "Python binary not specified" + sys.exit(1) + + if buildStubs("libvirt", stubs_buiding_debug, xml_parsing_debug) < 0: + sys.exit(1) + if buildStubs("libvirt-lxc", stubs_buiding_debug, xml_parsing_debug) < 0: + sys.exit(1) + if buildStubs("libvirt-qemu", stubs_buiding_debug, xml_parsing_debug) < 0: + sys.exit(1) + + buildWrappers("libvirt") + lxcBuildWrappers("libvirt-lxc") + qemuBuildWrappers("libvirt-qemu") + sys.exit(0) +else: + # imported + srcPref = os.path.dirname(__file__) + python = sys.executable + assert python -- 1.7.11.2 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list