[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 ----