[4suite] Using xml.parsers.expat

Martin v. Loewis martin at mira.cs.tu-berlin.de
Thu Feb 1 15:30:41 MST 2001


I noticed that 4Suite uses xml.parsers.pyexpat in a number of
places. That is unreliable, as that parser is built by PyXML only if
the pyexpat version in the Python Core is unusable. As a result,
people using Python 2.0a? will get import errors after they build the
current PyXML and 4Suite.

Instead, xml.parsers.expat should be used, which was available since
Python 2.0. This is a wrapper around the "best" pyexpat module,
i.e. it uses xml.parsers.pyexpat if available and pyexpat if not.

Please find a patch attached that changes the relevant sources.

Regards,
Martin

Index: Dom/ext/reader/PyExpat.py
===================================================================
RCS file: /var/local/cvsroot/Ft/Dom/ext/reader/PyExpat.py,v
retrieving revision 1.11
diff -u -r1.11 PyExpat.py
--- Dom/ext/reader/PyExpat.py	2001/01/17 22:38:17	1.11
+++ Dom/ext/reader/PyExpat.py	2001/02/01 22:09:58
@@ -8,7 +8,7 @@
 Components for reading XML files from PyExpat (Python 1.6, 2.0 or from PyXML).
 WWW: http://4suite.com/4DOM         e-mail: support at 4suite.com
 
-Copyright (c) 2000 Fourthought Inc, USA.   All Rights Reserved.
+Copyright (c) 2000, 2001 Fourthought Inc, USA.   All Rights Reserved.
 See  http://4suite.com/COPYRIGHT  for license and copyright information
 """
 
@@ -22,7 +22,7 @@
 from xml.dom import Attr
 from xml.dom.ext import reader
 
-from xml.parsers import pyexpat
+from xml.parsers import expat
 
 class Reader(reader.Reader):
     def __init__(self):
@@ -47,7 +47,7 @@
         return
 
     def initParser(self):
-        self.parser=pyexpat.ParserCreate()
+        self.parser=expat.ParserCreate()
         self.parser.StartElementHandler = self.startElement
         self.parser.EndElementHandler = self.endElement
         self.parser.CharacterDataHandler = self.characters
@@ -68,7 +68,7 @@
             from xml.dom import XML_PARSE_ERR
             if self._rootNode: ReleaseNode(self._rootNode)
             if self._ownerDoc: ReleaseNode(self._ownerDoc)
-            raise FtDomException(XML_PARSE_ERR, (self.parser.ErrorLineNumber, self.parser.ErrorColumnNumber, pyexpat.ErrorString(self.parser.ErrorCode)))
+            raise FtDomException(XML_PARSE_ERR, (self.parser.ErrorLineNumber, self.parser.ErrorColumnNumber, expat.ErrorString(self.parser.ErrorCode)))
         self._completeTextNode()
         return self._rootNode or self._ownerDoc
 
Index: Lib/pDomlette.py
===================================================================
RCS file: /var/local/cvsroot/Ft/Lib/pDomlette.py,v
retrieving revision 1.54
diff -u -r1.54 pDomlette.py
--- Lib/pDomlette.py	2001/01/28 07:00:40	1.54
+++ Lib/pDomlette.py	2001/02/01 22:10:00
@@ -9,7 +9,7 @@
 normalized
 WWW: http://4suite.com/4XSLT        e-mail: support at 4suite.com
 
-Copyright (c) 2000 Fourthought Inc, USA.   All Rights Reserved.
+Copyright (c) 2000, 2001 Fourthought Inc, USA.   All Rights Reserved.
 See  http://4suite.com/COPYRIGHT  for license and copyright information
 """
 
@@ -32,7 +32,7 @@
 import urllib
 
 import Ft.Lib
-from xml.parsers import pyexpat
+from xml.parsers import expat
 
 DOM_IMP = Ft.Lib.PDOMLETTE
 
@@ -571,7 +571,7 @@
         if not success:
             if self._rootNode: ReleaseNode(self._rootNode)
             if self._ownerDoc: ReleaseNode(self._ownerDoc)
-            raise Ft.Lib.FtException(Ft.Lib.Error.XML_PARSE_ERROR, (p.ErrorLineNumber, p.ErrorColumnNumber, pyexpat.ErrorString(p.ErrorCode)))
+            raise Ft.Lib.FtException(Ft.Lib.Error.XML_PARSE_ERROR, (p.ErrorLineNumber, p.ErrorColumnNumber, expat.ErrorString(p.ErrorCode)))
         self._completeTextNode()
         return self.getRootNode()
 
@@ -599,7 +599,7 @@
             handler = Utf8OnlyHandler(self)
         else:
             handler = self
-        self.parser=pyexpat.ParserCreate()
+        self.parser=expat.ParserCreate()
         self.parser.StartElementHandler = handler.startElement
         self.parser.EndElementHandler = handler.endElement
         self.parser.CharacterDataHandler = handler.characters
Index: Xslt/StylesheetReader.py
===================================================================
RCS file: /var/local/cvsroot/Ft/Xslt/StylesheetReader.py,v
retrieving revision 1.54
diff -u -r1.54 StylesheetReader.py
--- Xslt/StylesheetReader.py	2001/01/17 22:38:22	1.54
+++ Xslt/StylesheetReader.py	2001/02/01 22:10:01
@@ -9,7 +9,7 @@
 Create a stylesheet object
 WWW: http://4suite.com/4XSLT        e-mail: support at 4suite.com
 
-Copyright (c) 1999-2000 Fourthought Inc, USA.   All Rights Reserved.
+Copyright (c) 1999-2001 Fourthought Inc, USA.   All Rights Reserved.
 See  http://4suite.com/COPYRIGHT  for license and copyright information
 """
 
@@ -249,7 +249,7 @@
 
 ### Domlette Parser Interface ###
 
-from xml.parsers import pyexpat
+from xml.parsers import expat
 from Ft.Lib.pDomlette import Utf8OnlyHandler
 
 class StylesheetReader(ReaderBase.DomletteReader):
@@ -277,7 +277,7 @@
         if not success:
             self.releaseNode(self._rootNode)
             self.releaseNode(self._ownerDoc)
-            raise XsltException(Error.STYLESHEET_PARSE_ERROR, (baseUri, p.ErrorLineNumber, p.ErrorColumnNumber, pyexpat.ErrorString(p.ErrorCode)))
+            raise XsltException(Error.STYLESHEET_PARSE_ERROR, (baseUri, p.ErrorLineNumber, p.ErrorColumnNumber, expat.ErrorString(p.ErrorCode)))
         self._completeTextNode()
 
         root = self._rootNode or self._ownerDoc
@@ -318,7 +318,7 @@
             handler = Utf8OnlyHandler(self)
         else:
             handler = self
-        self.parser=pyexpat.ParserCreate()
+        self.parser=expat.ParserCreate()
         self.parser.StartElementHandler = handler.startElement
         self.parser.EndElementHandler = handler.endElement
         self.parser.CharacterDataHandler = handler.characters




More information about the 4suite mailing list