[Python-checkins] CVS: python/dist/src/Lib/xml/sax xmlreader.py,1.3,1.4

Fred L. Drake python-dev@python.org
Thu, 21 Sep 2000 10:43:50 -0700


Update of /cvsroot/python/python/dist/src/Lib/xml/sax
In directory slayer.i.sourceforge.net:/tmp/cvs-serv9605

Modified Files:
	xmlreader.py 
Log Message:

Paul Prescod <paul@prescod.net>:
Add support for parsing already-opened files.  Make sure the parse()
method closes exactly those files that it opens.

Modified by FLD for better conformance to the Python style guide.

This closes SourceForge patch #101512.


Index: xmlreader.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/xml/sax/xmlreader.py,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -r1.3 -r1.4
*** xmlreader.py	2000/07/16 12:04:31	1.3
--- xmlreader.py	2000/09/21 17:43:48	1.4
***************
*** 1,6 ****
- import handler
- 
  """An XML Reader is the SAX 2 name for an XML parser. XML Parsers
  should be based on this code. """
  # ===== XMLREADER =====
  
--- 1,7 ----
  """An XML Reader is the SAX 2 name for an XML parser. XML Parsers
  should be based on this code. """
+ 
+ import handler
+ 
  # ===== XMLREADER =====
  
***************
*** 8,14 ****
      def __init__(self):
          self._cont_handler = handler.ContentHandler()
!         #self._dtd_handler  = handler.DTDHandler()
!         #self._ent_handler  = handler.EntityResolver()
!         self._err_handler  = handler.ErrorHandler()
  
      def parse(self, source):
--- 9,15 ----
      def __init__(self):
          self._cont_handler = handler.ContentHandler()
!         #self._dtd_handler = handler.DTDHandler()
!         #self._ent_handler = handler.EntityResolver()
!         self._err_handler = handler.ErrorHandler()
  
      def parse(self, source):
***************
*** 93,112 ****
      IncrementalParser interface as a convenience to SAX 2.0 driver
      writers."""
!     def __init__(self, bufsize=2**16 ):
!         self._bufsize=bufsize
!         XMLReader.__init__( self )
!     
!     def parse(self, source):
!         self.prepareParser(source)
!         #FIXME: do some type checking: could be already stream, URL or
!         #       filename
!         inf=open( source )
!         buffer = inf.read(self._bufsize)
          while buffer != "":
              self.feed(buffer)
!             buffer = inf.read(self._bufsize)
          self.close()
          self.reset()
  
      def feed(self, data):        
          """This method gives the raw XML data in the data parameter to
--- 94,120 ----
      IncrementalParser interface as a convenience to SAX 2.0 driver
      writers."""
! 
!     def __init__(self, bufsize=2**16):
!         self._bufsize = bufsize
!         XMLReader.__init__(self)
! 
!     def _parseOpenFile(self, source):
!         buffer = source.read(self._bufsize)
          while buffer != "":
              self.feed(buffer)
!             buffer = source.read(self._bufsize)
          self.close()
          self.reset()
  
+     def parse(self, source):
+         if hasattr(source, "read"):
+             self._parseOpenFile(source)
+         else:
+             #FIXME: how to recognize if it is a URL instead of filename?
+             self.prepareParser(source)
+             file = open(source)
+             self._parseOpenFile(file)
+             file.close()
+ 
      def feed(self, data):        
          """This method gives the raw XML data in the data parameter to
***************
*** 117,120 ****
--- 125,129 ----
          feed may raise SAXException."""
          raise NotImplementedError("This method must be implemented!")
+ 
      def prepareParser(self, source):
          """This method is called by the parse implementation to allow
***************
*** 216,219 ****
--- 225,229 ----
          return self._attrs.values()
  
+ 
  def _test():
      XMLReader()
***************
*** 222,225 ****
      AttributesImpl()
  
! if __name__=="__main__":
      _test()
--- 232,235 ----
      AttributesImpl()
  
! if __name__ == "__main__":
      _test()