[libxml2] Fix python generator to not use deprecated xmllib



commit 794613770ddeefa840421425af76babfd939c083
Author: Daniel Veillard <veillard redhat com>
Date:   Wed Jan 13 15:34:50 2010 +0100

    Fix python generator to not use deprecated xmllib
    
    * python/generator.py: use xml.sax instead, patch based on similar
      fir for libvirt by Cole Robinson <crobinso redhat com>

 python/generator.py |   74 ++++++++------------------------------------------
 1 files changed, 12 insertions(+), 62 deletions(-)
---
diff --git a/python/generator.py b/python/generator.py
index 92a3440..9e1fdaa 100755
--- a/python/generator.py
+++ b/python/generator.py
@@ -24,77 +24,27 @@ else:
 #
 #######################################################################
 import os
-import xmllib
-try:
-    import sgmlop
-except ImportError:
-    sgmlop = None # accelerator not available
+import xml.sax
 
 debug = 0
 
-if sgmlop:
-    class FastParser:
-        """sgmlop based XML parser.  this is typically 15x faster
-           than SlowParser..."""
-
-        def __init__(self, target):
-
-            # setup callbacks
-            self.finish_starttag = target.start
-            self.finish_endtag = target.end
-            self.handle_data = target.data
-
-            # activate parser
-            self.parser = sgmlop.XMLParser()
-            self.parser.register(self)
-            self.feed = self.parser.feed
-            self.entity = {
-                "amp": "&", "gt": ">", "lt": "<",
-                "apos": "'", "quot": '"'
-                }
-
-        def close(self):
-            try:
-                self.parser.close()
-            finally:
-                self.parser = self.feed = None # nuke circular reference
-
-        def handle_entityref(self, entity):
-            # <string> entity
-            try:
-                self.handle_data(self.entity[entity])
-            except KeyError:
-                self.handle_data("&%s;" % entity)
+def getparser():
+    # Attach parser to an unmarshalling object. return both objects.
+    target = docParser()
+    parser = xml.sax.make_parser()
+    parser.setContentHandler(target)
+    return parser, target
 
-else:
-    FastParser = None
-
-
-class SlowParser(xmllib.XMLParser):
-    """slow but safe standard parser, based on the XML parser in
-       Python's standard library."""
-
-    def __init__(self, target):
-        self.unknown_starttag = target.start
-        self.handle_data = target.data
-        self.unknown_endtag = target.end
-        xmllib.XMLParser.__init__(self)
-
-def getparser(target = None):
-    # get the fastest available parser, and attach it to an
-    # unmarshalling object.  return both objects.
-    if target is None:
-        target = docParser()
-    if FastParser:
-        return FastParser(target), target
-    return SlowParser(target), target
-
-class docParser:
+class docParser(xml.sax.handler.ContentHandler):
     def __init__(self):
         self._methodname = None
         self._data = []
         self.in_function = 0
 
+        self.startElement = self.start
+        self.endElement = self.end
+        self.characters = self.data
+
     def close(self):
         if debug:
             print "close"



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]