[Python-checkins] cpython (merge default -> default): Merging the 3.4.0a1 head.

larry.hastings python-checkins at python.org
Sun Aug 4 08:33:22 CEST 2013


http://hg.python.org/cpython/rev/77558617b2ba
changeset:   85014:77558617b2ba
parent:      85013:f434c39a3434
parent:      85008:96f45011957e
user:        Larry Hastings <larry at hastings.org>
date:        Sat Aug 03 23:30:13 2013 -0700
summary:
  Merging the 3.4.0a1 head.

files:
  Doc/library/xml.etree.elementtree.rst |   5 +++--
  Lib/sre_compile.py                    |   4 ++--
  Lib/test/test_unicode.py              |   2 --
  Lib/test/test_xml_etree.py            |  14 ++++++++++++++
  Lib/xml/etree/ElementPath.py          |   6 ++++--
  5 files changed, 23 insertions(+), 8 deletions(-)


diff --git a/Doc/library/xml.etree.elementtree.rst b/Doc/library/xml.etree.elementtree.rst
--- a/Doc/library/xml.etree.elementtree.rst
+++ b/Doc/library/xml.etree.elementtree.rst
@@ -416,7 +416,8 @@
    and ``"end-ns"`` (the "ns" events are used to get detailed namespace
    information).  If *events* is omitted, only ``"end"`` events are reported.
    *parser* is an optional parser instance.  If not given, the standard
-   :class:`XMLParser` parser is used.  Returns an :term:`iterator` providing
+   :class:`XMLParser` parser is used.  *parser* can only use the default
+   :class:`TreeBuilder` as a target.  Returns an :term:`iterator` providing
    ``(event, elem)`` pairs.
 
    Note that while :func:`iterparse` builds the tree incrementally, it issues
@@ -880,7 +881,7 @@
    events are used to get detailed namespace information).  If *events* is
    omitted, only ``"end"`` events are reported.  *parser* is an optional
    parser instance.  If not given, the standard :class:`XMLParser` parser is
-   used.
+   used.  *parser* can only use the default :class:`TreeBuilder` as a target.
 
    .. method:: data_received(data)
 
diff --git a/Lib/sre_compile.py b/Lib/sre_compile.py
--- a/Lib/sre_compile.py
+++ b/Lib/sre_compile.py
@@ -351,8 +351,8 @@
 def _simple(av):
     # check if av is a "simple" operator
     lo, hi = av[2].getwidth()
-    if lo == 0 and hi == MAXREPEAT:
-        raise error("nothing to repeat")
+    #if lo == 0 and hi == MAXREPEAT:
+    #    raise error("nothing to repeat")
     return lo == hi == 1 and av[2][0][0] != SUBPATTERN
 
 def _compile_info(code, pattern, flags):
diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py
--- a/Lib/test/test_unicode.py
+++ b/Lib/test/test_unicode.py
@@ -1735,8 +1735,6 @@
         self.assertRaises(TypeError, "hello".encode, 42, 42, 42)
 
         # Error handling (lone surrogate in PyUnicode_TransformDecimalToASCII())
-        self.assertRaises(UnicodeError, int, "\ud800")
-        self.assertRaises(UnicodeError, int, "\udf00")
         self.assertRaises(UnicodeError, float, "\ud800")
         self.assertRaises(UnicodeError, float, "\udf00")
         self.assertRaises(UnicodeError, complex, "\ud800")
diff --git a/Lib/test/test_xml_etree.py b/Lib/test/test_xml_etree.py
--- a/Lib/test/test_xml_etree.py
+++ b/Lib/test/test_xml_etree.py
@@ -1839,6 +1839,20 @@
             summarize_list(e.findall(".//{http://effbot.org/ns}tag")),
             ['{http://effbot.org/ns}tag'] * 3)
 
+    def test_findall_different_nsmaps(self):
+        root = ET.XML('''
+            <a xmlns:x="X" xmlns:y="Y">
+                <x:b><c/></x:b>
+                <b/>
+                <c><x:b/><b/></c><y:b/>
+            </a>''')
+        nsmap = {'xx': 'X'}
+        self.assertEqual(len(root.findall(".//xx:b", namespaces=nsmap)), 2)
+        self.assertEqual(len(root.findall(".//b", namespaces=nsmap)), 2)
+        nsmap = {'xx': 'Y'}
+        self.assertEqual(len(root.findall(".//xx:b", namespaces=nsmap)), 1)
+        self.assertEqual(len(root.findall(".//b", namespaces=nsmap)), 2)
+
     def test_bad_find(self):
         e = ET.XML(SAMPLE_XML)
         with self.assertRaisesRegex(SyntaxError, 'cannot use absolute path'):
diff --git a/Lib/xml/etree/ElementPath.py b/Lib/xml/etree/ElementPath.py
--- a/Lib/xml/etree/ElementPath.py
+++ b/Lib/xml/etree/ElementPath.py
@@ -249,10 +249,12 @@
 
 def iterfind(elem, path, namespaces=None):
     # compile selector pattern
+    cache_key = (path, None if namespaces is None
+                            else tuple(sorted(namespaces.items())))
     if path[-1:] == "/":
         path = path + "*" # implicit all (FIXME: keep this?)
     try:
-        selector = _cache[path]
+        selector = _cache[cache_key]
     except KeyError:
         if len(_cache) > 100:
             _cache.clear()
@@ -272,7 +274,7 @@
                     token = next()
             except StopIteration:
                 break
-        _cache[path] = selector
+        _cache[cache_key] = selector
     # execute selector pattern
     result = [elem]
     context = _SelectorContext(elem)

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list