Stop trying to use _xmlplus in the xml module. Closes #11164.
Patch by Arfrever Frehtes Taifersar Arahesis.
This commit is contained in:
parent
8269a44d50
commit
2f48d892d4
|
@ -187,7 +187,7 @@ modules using the Distutils:
|
||||||
module distribution
|
module distribution
|
||||||
a collection of Python modules distributed together as a single downloadable
|
a collection of Python modules distributed together as a single downloadable
|
||||||
resource and meant to be installed *en masse*. Examples of some well-known
|
resource and meant to be installed *en masse*. Examples of some well-known
|
||||||
module distributions are Numeric Python, PyXML, PIL (the Python Imaging
|
module distributions are NumPy, SciPy, PIL (the Python Imaging
|
||||||
Library), or mxBase. (This would be called a *package*, except that term is
|
Library), or mxBase. (This would be called a *package*, except that term is
|
||||||
already taken in the Python context: a single module distribution may contain
|
already taken in the Python context: a single module distribution may contain
|
||||||
zero, one, or many Python packages.)
|
zero, one, or many Python packages.)
|
||||||
|
|
|
@ -22,8 +22,7 @@ report of the imported modules will be printed.
|
||||||
.. function:: ReplacePackage(oldname, newname)
|
.. function:: ReplacePackage(oldname, newname)
|
||||||
|
|
||||||
Allows specifying that the module named *oldname* is in fact the package named
|
Allows specifying that the module named *oldname* is in fact the package named
|
||||||
*newname*. The most common usage would be to handle how the :mod:`_xmlplus`
|
*newname*.
|
||||||
package replaces the :mod:`xml` package.
|
|
||||||
|
|
||||||
|
|
||||||
.. class:: ModuleFinder(path=None, debug=0, excludes=[], replace_paths=[])
|
.. class:: ModuleFinder(path=None, debug=0, excludes=[], replace_paths=[])
|
||||||
|
|
|
@ -57,12 +57,8 @@ functions do not provide a parser implementation themselves.
|
||||||
You can also create a :class:`Document` by calling a method on a "DOM
|
You can also create a :class:`Document` by calling a method on a "DOM
|
||||||
Implementation" object. You can get this object either by calling the
|
Implementation" object. You can get this object either by calling the
|
||||||
:func:`getDOMImplementation` function in the :mod:`xml.dom` package or the
|
:func:`getDOMImplementation` function in the :mod:`xml.dom` package or the
|
||||||
:mod:`xml.dom.minidom` module. Using the implementation from the
|
:mod:`xml.dom.minidom` module. Once you have a :class:`Document`, you
|
||||||
:mod:`xml.dom.minidom` module will always return a :class:`Document` instance
|
can add child nodes to it to populate the DOM::
|
||||||
from the minidom implementation, while the version from :mod:`xml.dom` may
|
|
||||||
provide an alternate implementation (this is likely if you have the `PyXML
|
|
||||||
package <http://pyxml.sourceforge.net/>`_ installed). Once you have a
|
|
||||||
:class:`Document`, you can add child nodes to it to populate the DOM::
|
|
||||||
|
|
||||||
from xml.dom.minidom import getDOMImplementation
|
from xml.dom.minidom import getDOMImplementation
|
||||||
|
|
||||||
|
|
|
@ -30,13 +30,6 @@ The Document Object Model is being defined by the W3C in stages, or "levels" in
|
||||||
their terminology. The Python mapping of the API is substantially based on the
|
their terminology. The Python mapping of the API is substantially based on the
|
||||||
DOM Level 2 recommendation.
|
DOM Level 2 recommendation.
|
||||||
|
|
||||||
.. XXX PyXML is dead...
|
|
||||||
.. The mapping of the Level 3 specification, currently
|
|
||||||
only available in draft form, is being developed by the `Python XML Special
|
|
||||||
Interest Group <http://www.python.org/sigs/xml-sig/>`_ as part of the `PyXML
|
|
||||||
package <http://pyxml.sourceforge.net/>`_. Refer to the documentation bundled
|
|
||||||
with that package for information on the current state of DOM Level 3 support.
|
|
||||||
|
|
||||||
.. What if your needs are somewhere between SAX and the DOM? Perhaps
|
.. What if your needs are somewhere between SAX and the DOM? Perhaps
|
||||||
you cannot afford to load the entire tree in memory but you find the
|
you cannot afford to load the entire tree in memory but you find the
|
||||||
SAX model somewhat cumbersome and low-level. There is also a module
|
SAX model somewhat cumbersome and low-level. There is also a module
|
||||||
|
|
|
@ -35,9 +35,10 @@ def AddPackagePath(packagename, path):
|
||||||
|
|
||||||
replacePackageMap = {}
|
replacePackageMap = {}
|
||||||
|
|
||||||
# This ReplacePackage mechanism allows modulefinder to work around the
|
# This ReplacePackage mechanism allows modulefinder to work around
|
||||||
# way the _xmlplus package injects itself under the name "xml" into
|
# situations in which a package injects itself under the name
|
||||||
# sys.modules at runtime by calling ReplacePackage("_xmlplus", "xml")
|
# of another package into sys.modules at runtime by calling
|
||||||
|
# ReplacePackage("real_package_name", "faked_package_name")
|
||||||
# before running ModuleFinder.
|
# before running ModuleFinder.
|
||||||
|
|
||||||
def ReplacePackage(oldname, newname):
|
def ReplacePackage(oldname, newname):
|
||||||
|
|
|
@ -51,26 +51,6 @@ def create_doc_with_doctype():
|
||||||
return doc
|
return doc
|
||||||
|
|
||||||
class MinidomTest(unittest.TestCase):
|
class MinidomTest(unittest.TestCase):
|
||||||
def tearDown(self):
|
|
||||||
try:
|
|
||||||
Node.allnodes
|
|
||||||
except AttributeError:
|
|
||||||
# We don't actually have the minidom from the standard library,
|
|
||||||
# but are picking up the PyXML version from site-packages.
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
self.confirm(len(Node.allnodes) == 0,
|
|
||||||
"assertion: len(Node.allnodes) == 0")
|
|
||||||
if len(Node.allnodes):
|
|
||||||
print("Garbage left over:")
|
|
||||||
if verbose:
|
|
||||||
print(list(Node.allnodes.items())[0:10])
|
|
||||||
else:
|
|
||||||
# Don't print specific nodes if repeatable results
|
|
||||||
# are needed
|
|
||||||
print(len(Node.allnodes))
|
|
||||||
Node.allnodes = {}
|
|
||||||
|
|
||||||
def confirm(self, test, testname = "Test"):
|
def confirm(self, test, testname = "Test"):
|
||||||
self.assertTrue(test, testname)
|
self.assertTrue(test, testname)
|
||||||
|
|
||||||
|
|
|
@ -694,51 +694,6 @@ class XmlReaderTest(XmlTestBase):
|
||||||
self.assertEqual(attrs.getQNameByName((ns_uri, "attr")), "ns:attr")
|
self.assertEqual(attrs.getQNameByName((ns_uri, "attr")), "ns:attr")
|
||||||
|
|
||||||
|
|
||||||
# During the development of Python 2.5, an attempt to move the "xml"
|
|
||||||
# package implementation to a new package ("xmlcore") proved painful.
|
|
||||||
# The goal of this change was to allow applications to be able to
|
|
||||||
# obtain and rely on behavior in the standard library implementation
|
|
||||||
# of the XML support without needing to be concerned about the
|
|
||||||
# availability of the PyXML implementation.
|
|
||||||
#
|
|
||||||
# While the existing import hackery in Lib/xml/__init__.py can cause
|
|
||||||
# PyXML's _xmlpus package to supplant the "xml" package, that only
|
|
||||||
# works because either implementation uses the "xml" package name for
|
|
||||||
# imports.
|
|
||||||
#
|
|
||||||
# The move resulted in a number of problems related to the fact that
|
|
||||||
# the import machinery's "package context" is based on the name that's
|
|
||||||
# being imported rather than the __name__ of the actual package
|
|
||||||
# containment; it wasn't possible for the "xml" package to be replaced
|
|
||||||
# by a simple module that indirected imports to the "xmlcore" package.
|
|
||||||
#
|
|
||||||
# The following two tests exercised bugs that were introduced in that
|
|
||||||
# attempt. Keeping these tests around will help detect problems with
|
|
||||||
# other attempts to provide reliable access to the standard library's
|
|
||||||
# implementation of the XML support.
|
|
||||||
|
|
||||||
def test_sf_1511497(self):
|
|
||||||
# Bug report: http://www.python.org/sf/1511497
|
|
||||||
import sys
|
|
||||||
old_modules = sys.modules.copy()
|
|
||||||
for modname in list(sys.modules.keys()):
|
|
||||||
if modname.startswith("xml."):
|
|
||||||
del sys.modules[modname]
|
|
||||||
try:
|
|
||||||
import xml.sax.expatreader
|
|
||||||
module = xml.sax.expatreader
|
|
||||||
self.assertEqual(module.__name__, "xml.sax.expatreader")
|
|
||||||
finally:
|
|
||||||
sys.modules.update(old_modules)
|
|
||||||
|
|
||||||
def test_sf_1513611(self):
|
|
||||||
# Bug report: http://www.python.org/sf/1513611
|
|
||||||
sio = StringIO("invalid")
|
|
||||||
parser = make_parser()
|
|
||||||
from xml.sax import SAXParseException
|
|
||||||
self.assertRaises(SAXParseException, parser.parse, sio)
|
|
||||||
|
|
||||||
|
|
||||||
def test_main():
|
def test_main():
|
||||||
run_unittest(MakeParserTest,
|
run_unittest(MakeParserTest,
|
||||||
SaxutilsTest,
|
SaxutilsTest,
|
||||||
|
|
|
@ -18,24 +18,3 @@ etree -- The ElementTree XML library. This is a subset of the full
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["dom", "parsers", "sax", "etree"]
|
__all__ = ["dom", "parsers", "sax", "etree"]
|
||||||
|
|
||||||
_MINIMUM_XMLPLUS_VERSION = (0, 8, 4)
|
|
||||||
|
|
||||||
|
|
||||||
try:
|
|
||||||
import _xmlplus
|
|
||||||
except ImportError:
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
try:
|
|
||||||
v = _xmlplus.version_info
|
|
||||||
except AttributeError:
|
|
||||||
# _xmlplus is too old; ignore it
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
if v >= _MINIMUM_XMLPLUS_VERSION:
|
|
||||||
import sys
|
|
||||||
_xmlplus.__path__.extend(__path__)
|
|
||||||
sys.modules[__name__] = _xmlplus
|
|
||||||
else:
|
|
||||||
del v
|
|
||||||
|
|
|
@ -66,6 +66,8 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #11164: Stop trying to use _xmlplus in the xml module.
|
||||||
|
|
||||||
- Issue #11927: SMTP_SSL now uses port 465 by default as documented. Patch
|
- Issue #11927: SMTP_SSL now uses port 465 by default as documented. Patch
|
||||||
by Kasun Herath.
|
by Kasun Herath.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue