[Python-checkins] CVS: python/dist/src/Lib/xml/sax expatreader.py,1.6,1.7 xmlreader.py,1.4,1.5

Lars Marius Garshol python-dev@python.org
Sun, 24 Sep 2000 11:39:26 -0700


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

Modified Files:
	expatreader.py xmlreader.py 
Log Message:
Updated to final Attributes interface (patch 101632).


Index: expatreader.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/xml/sax/expatreader.py,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -r1.6 -r1.7
*** expatreader.py	2000/09/24 18:29:24	1.6
--- expatreader.py	2000/09/24 18:39:23	1.7
***************
*** 21,24 ****
--- 21,27 ----
  from xml.sax import xmlreader
  
+ AttributesImpl = xmlreader.AttributesImpl
+ AttributesNSImpl = xmlreader.AttributesNSImpl
+ 
  # --- ExpatParser
  
***************
*** 32,36 ****
          self._namespaces = namespaceHandling
          self._parsing = 0
-         self._attrs = xmlreader.AttributesImpl({}, {})
  
      # XMLReader methods
--- 35,38 ----
***************
*** 138,142 ****
      # event handlers
      def start_element(self, name, attrs):
!         self._cont_handler.startElement(name, self._attrs)
  
      def end_element(self, name):
--- 140,144 ----
      # event handlers
      def start_element(self, name, attrs):
!         self._cont_handler.startElement(name, AttributesImpl(attrs))
  
      def end_element(self, name):
***************
*** 147,157 ****
          if len(pair) == 1:
              pair = (None, name)
  
!         self._cont_handler.startElementNS(pair, None, self._attrs)
  
      def end_element_ns(self, name):
          pair = name.split()
          if len(pair) == 1:
!             name = (None, name)
              
          self._cont_handler.endElementNS(pair, None)
--- 149,170 ----
          if len(pair) == 1:
              pair = (None, name)
+ 
+         newattrs = {}
+         for (aname, value) in attrs.items():
+             apair = aname.split()
+             if len(apair) == 1:
+                 apair = (None, aname)
+             else:
+                 apair = tuple(apair)
  
!             newattrs[apair] = value
  
+         self._cont_handler.startElementNS(pair, None, 
+                                           AttributesNSImpl(newattrs, {}))
+ 
      def end_element_ns(self, name):
          pair = name.split()
          if len(pair) == 1:
!             pair = (None, name)
              
          self._cont_handler.endElementNS(pair, None)

Index: xmlreader.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/xml/sax/xmlreader.py,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -r1.4 -r1.5
*** xmlreader.py	2000/09/21 17:43:48	1.4
--- xmlreader.py	2000/09/24 18:39:23	1.5
***************
*** 152,155 ****
--- 152,156 ----
  
  # ===== LOCATOR =====
+ 
  class Locator:
      """Interface for associating a SAX event with a document
***************
*** 173,182 ****
          "Return the system identifier for the current event."
          return None
  
- # --- AttributesImpl
  class AttributesImpl:
!     def __init__(self, attrs, rawnames):
          self._attrs = attrs
-         self._rawnames = rawnames
  
      def getLength(self):
--- 174,187 ----
          "Return the system identifier for the current event."
          return None
+ 
+ # ===== ATTRIBUTESIMPL =====
  
  class AttributesImpl:
!     
!     def __init__(self, attrs):
!         """Non-NS-aware implementation.
! 
!         attrs should be of the form {name : value}."""
          self._attrs = attrs
  
      def getLength(self):
***************
*** 190,203 ****
  
      def getValueByQName(self, name):
!         return self._attrs[self._rawnames[name]]
  
      def getNameByQName(self, name):
!         return self._rawnames[name]
! 
      def getNames(self):
          return self._attrs.keys()
  
      def getQNames(self):
!         return self._rawnames.keys()    
  
      def __len__(self):
--- 195,215 ----
  
      def getValueByQName(self, name):
!         return self._attrs[name]
  
      def getNameByQName(self, name):
!         if not self._attrs.has_key(name):
!             raise KeyError
!         return name
! 
!     def getQNameByName(self, name):
!         if not self._attrs.has_key(name):
!             raise KeyError
!         return name        
!     
      def getNames(self):
          return self._attrs.keys()
  
      def getQNames(self):
!         return self._attrs.keys()    
  
      def __len__(self):
***************
*** 217,221 ****
  
      def copy(self):
!         return self.__class__(self._attrs, self._rawnames)
  
      def items(self):
--- 229,233 ----
  
      def copy(self):
!         return self.__class__(self._attrs)
  
      def items(self):
***************
*** 225,228 ****
--- 237,275 ----
          return self._attrs.values()
  
+ # ===== ATTRIBUTESNSIMPL =====
+ 
+ class AttributesNSImpl(AttributesImpl):
+     
+     def __init__(self, attrs, qnames):
+         """NS-aware implementation.
+ 
+         attrs should be of the form {(ns_uri, lname): value, ...}.
+         qnames of the form {(ns_uri, lname): qname, ...}."""
+         self._attrs = attrs
+         self._qnames = qnames
+ 
+     def getValueByQName(self, name):
+         for (nsname, qname) in self._qnames.items():
+             if qname == name:
+                 return self._attrs[nsname]
+             
+         raise KeyError
+ 
+     def getNameByQName(self, name):
+         for (nsname, qname) in self._qnames.items():
+             if qname == name:
+                 return nsname
+             
+         raise KeyError
+ 
+     def getQNameByName(self, name):
+         return self._qnames[name]
+     
+     def getQNames(self):
+         return self._qnames.values()
+ 
+     def copy(self):
+         return self.__class__(self._attrs, self._qnames)
+     
  
  def _test():
***************
*** 230,234 ****
      IncrementalParser()
      Locator()
-     AttributesImpl()
  
  if __name__ == "__main__":
--- 277,280 ----