Skip to content

Commit 34af031

Browse files
committed
Addressed PR comments
1 parent 256a97b commit 34af031

2 files changed

Lines changed: 31 additions & 7 deletions

File tree

Lib/test/test_sax.py

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
XMLFilterBase, prepare_input_source
1414
from xml.sax.expatreader import create_parser
1515
from xml.sax.handler import (feature_namespaces, feature_external_ges,
16-
LexicalHandler)
16+
LexicalHandler, feature_namespace_prefixes)
1717
from xml.sax.xmlreader import InputSource, AttributesImpl, AttributesNSImpl
1818
from xml import sax
1919
from io import BytesIO, StringIO
@@ -1319,15 +1319,36 @@ def startElementNS(self, name, qname, attrs):
13191319
("<E />", "E"),
13201320
):
13211321
parser = create_parser()
1322-
parser.setFeature(handler.feature_namespaces, 1)
1323-
parser.setFeature(handler.feature_namespace_prefixes, 1)
1322+
parser.setFeature(feature_namespaces, 1)
1323+
parser.setFeature(feature_namespace_prefixes, 1)
13241324

13251325
h = Handler()
13261326

13271327
parser.setContentHandler(h)
13281328
parser.parse(StringIO(xml_s))
13291329
self.assertEqual(h.qname, expected_qname)
13301330

1331+
def test_qualified_names_when_feature_not_set(self):
1332+
1333+
class Handler(ContentHandler):
1334+
def startElementNS(self, name, qname, attrs):
1335+
self.qname = qname
1336+
1337+
for xml_s in (
1338+
"<Q:E xmlns:Q='http://example.org/testuri'/>",
1339+
"<E xmlns='http://example.org/testuri'/>",
1340+
"<E />",
1341+
):
1342+
parser = create_parser()
1343+
parser.setFeature(feature_namespaces, 1)
1344+
1345+
h = Handler()
1346+
1347+
parser.setContentHandler(h)
1348+
parser.parse(StringIO(xml_s))
1349+
1350+
self.assertIsNone(h.qname)
1351+
13311352

13321353
# ===========================================================================
13331354
#

Lib/xml/sax/expatreader.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ def getSystemId(self):
7979
class ExpatParser(xmlreader.IncrementalParser, xmlreader.Locator):
8080
"""SAX driver for the pyexpat C module."""
8181

82-
def __init__(self, namespaceHandling=0, namespacePrefixesHandling=0, bufsize=2**16-20):
82+
def __init__(self, namespaceHandling=0, bufsize=2**16-20):
8383
xmlreader.IncrementalParser.__init__(self, bufsize)
8484
self._source = xmlreader.InputSource()
8585
self._parser = None
@@ -89,7 +89,7 @@ def __init__(self, namespaceHandling=0, namespacePrefixesHandling=0, bufsize=2**
8989
self._entity_stack = []
9090
self._external_ges = 0
9191
self._interning = None
92-
self._namespace_prefixes = namespacePrefixesHandling
92+
self._namespace_prefixes = 0
9393

9494
# XMLReader methods
9595

@@ -147,8 +147,6 @@ def setFeature(self, name, state):
147147
self._interning = {}
148148
else:
149149
self._interning = None
150-
elif name == feature_namespace_prefixes:
151-
self._namespace_prefixes = state
152150
elif name == feature_validation:
153151
if state:
154152
raise SAXNotSupportedException(
@@ -157,6 +155,8 @@ def setFeature(self, name, state):
157155
if state:
158156
raise SAXNotSupportedException(
159157
"expat does not read external parameter entities")
158+
elif name == feature_namespace_prefixes:
159+
self._namespace_prefixes = state
160160
else:
161161
raise SAXNotRecognizedException(
162162
"Feature '%s' not recognized" % name)
@@ -375,6 +375,9 @@ def start_element_ns(self, name, attrs):
375375
newattrs[apair] = value
376376
qnames[apair] = qname
377377

378+
if not self._namespace_prefixes:
379+
elem_qname = None
380+
378381
self._cont_handler.startElementNS(pair, elem_qname,
379382
AttributesNSImpl(newattrs, qnames))
380383

0 commit comments

Comments
 (0)