Kaydet (Commit) fbdeaad0 authored tarafından Fred Drake's avatar Fred Drake

expunge the xmlcore changes:

  41667, 41668 - initial switch to xmlcore
  47044        - mention of xmlcore in What's New
  50687        - mention of xmlcore in the library reference

re-apply xmlcore changes to xml:
  41674        - line ending changes (re-applied manually), directory props
  41677        - add cElementTree wrapper
  41678        - PSF licensing for etree
  41812        - whitespace normalization
  42724        - fix svn:eol-style settings
  43681, 43682 - remove Python version-compatibility cruft from minidom
  46773        - fix encoding of \r\n\t in attr values in saxutils
  47269        - added XMLParser alias for cElementTree compatibility

additional tests were added in Lib/test/test_sax.py that failed with
the xmlcore changes; these relate to SF bugs #1511497, #1513611
üst c032ee93
...@@ -15,17 +15,6 @@ You may still want to be aware of the \ulink{PyXML add-on ...@@ -15,17 +15,6 @@ You may still want to be aware of the \ulink{PyXML add-on
package}{http://pyxml.sourceforge.net/}; that package provides an package}{http://pyxml.sourceforge.net/}; that package provides an
extended set of XML libraries for Python. extended set of XML libraries for Python.
Python 2.5 introduces the \module{xmlcore} package; this package
provides the implementation of the \module{xml} package as distributed
with the standard library. The \module{xml} package, as in earlier
versions, provides an interface that will provide the PyXML
implementation of the interfaces when available, and the standard
library implementation if not. Applications that can use either the
PyXML implementation or the standard library's implementation may
continue to make imports from the \module{xml} package; applications
that want to only import the standard library's implementation can now
use the \module{xmlcore} package.
The documentation for the \module{xml.dom} and \module{xml.sax} The documentation for the \module{xml.dom} and \module{xml.sax}
packages are the definition of the Python bindings for the DOM and SAX packages are the definition of the Python bindings for the DOM and SAX
interfaces. interfaces.
......
...@@ -1760,13 +1760,6 @@ Konqueror, and elinks. (Contributed by Oleg Broytmann and Georg ...@@ -1760,13 +1760,6 @@ Konqueror, and elinks. (Contributed by Oleg Broytmann and Georg
Brandl.) Brandl.)
% Patch #754022 % Patch #754022
\item The standard library's XML-related package
has been renamed to \module{xmlcore}. The \module{xml} module will
now import either the \module{xmlcore} or PyXML version of subpackages
such as \module{xml.dom}. The renaming means it will always be
possible to import the standard library's XML support whether or not
the PyXML package is installed.
\item The \module{xmlrpclib} module now supports returning \item The \module{xmlrpclib} module now supports returning
\class{datetime} objects for the XML-RPC date type. Supply \class{datetime} objects for the XML-RPC date type. Supply
\code{use_datetime=True} to the \function{loads()} function \code{use_datetime=True} to the \function{loads()} function
...@@ -2404,10 +2397,6 @@ to allow only \code{'/'} and \code{'/RPC2'}. Setting ...@@ -2404,10 +2397,6 @@ to allow only \code{'/'} and \code{'/RPC2'}. Setting
\member{rpc_paths} to \code{None} or an empty tuple disables \member{rpc_paths} to \code{None} or an empty tuple disables
this path checking. this path checking.
\item Library: the \module{xml} package has been renamed to \module{xmlcore}.
The PyXML package will therefore be \module{xml}, and the Python
distribution's code will always be accessible as \module{xmlcore}.
\item C API: Many functions now use \ctype{Py_ssize_t} \item C API: Many functions now use \ctype{Py_ssize_t}
instead of \ctype{int} to allow processing more data on 64-bit instead of \ctype{int} to allow processing more data on 64-bit
machines. Extension code may need to make the same change to avoid machines. Extension code may need to make the same change to avoid
......
This diff is collapsed.
# regression test for SAX 2.0 -*- coding: iso-8859-1 -*- # regression test for SAX 2.0 -*- coding: iso-8859-1 -*-
# $Id$ # $Id$
from xmlcore.sax import make_parser, ContentHandler, \ from xml.sax import make_parser, ContentHandler, \
SAXException, SAXReaderNotAvailable, SAXParseException SAXException, SAXReaderNotAvailable, SAXParseException
try: try:
make_parser() make_parser()
except SAXReaderNotAvailable: except SAXReaderNotAvailable:
# don't try to test this module if we cannot create a parser # don't try to test this module if we cannot create a parser
raise ImportError("no XML parsers available") raise ImportError("no XML parsers available")
from xmlcore.sax.saxutils import XMLGenerator, escape, unescape, quoteattr, \ from xml.sax.saxutils import XMLGenerator, escape, unescape, quoteattr, \
XMLFilterBase XMLFilterBase
from xmlcore.sax.expatreader import create_parser from xml.sax.expatreader import create_parser
from xmlcore.sax.xmlreader import InputSource, AttributesImpl, AttributesNSImpl from xml.sax.xmlreader import InputSource, AttributesImpl, AttributesNSImpl
from cStringIO import StringIO from cStringIO import StringIO
from test.test_support import verify, verbose, TestFailed, findfile from test.test_support import verify, verbose, TestFailed, findfile
import os import os
...@@ -36,17 +36,17 @@ def test_make_parser2(): ...@@ -36,17 +36,17 @@ def test_make_parser2():
# Creating parsers several times in a row should succeed. # Creating parsers several times in a row should succeed.
# Testing this because there have been failures of this kind # Testing this because there have been failures of this kind
# before. # before.
from xmlcore.sax import make_parser from xml.sax import make_parser
p = make_parser() p = make_parser()
from xmlcore.sax import make_parser from xml.sax import make_parser
p = make_parser() p = make_parser()
from xmlcore.sax import make_parser from xml.sax import make_parser
p = make_parser() p = make_parser()
from xmlcore.sax import make_parser from xml.sax import make_parser
p = make_parser() p = make_parser()
from xmlcore.sax import make_parser from xml.sax import make_parser
p = make_parser() p = make_parser()
from xmlcore.sax import make_parser from xml.sax import make_parser
p = make_parser() p = make_parser()
except: except:
return 0 return 0
...@@ -108,7 +108,7 @@ def test_make_parser(): ...@@ -108,7 +108,7 @@ def test_make_parser():
try: try:
# Creating a parser should succeed - it should fall back # Creating a parser should succeed - it should fall back
# to the expatreader # to the expatreader
p = make_parser(['xmlcore.parsers.no_such_parser']) p = make_parser(['xml.parsers.no_such_parser'])
except: except:
return 0 return 0
else: else:
...@@ -671,6 +671,55 @@ def test_nsattrs_wattr(): ...@@ -671,6 +671,55 @@ def test_nsattrs_wattr():
attrs.getQNameByName((ns_uri, "attr")) == "ns:attr" 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():
# Bug report: http://www.python.org/sf/1511497
import sys
old_modules = sys.modules.copy()
for modname in sys.modules.keys():
if modname.startswith("xml."):
del sys.modules[modname]
try:
import xml.sax.expatreader
module = xml.sax.expatreader
return module.__name__ == "xml.sax.expatreader"
finally:
sys.modules.update(old_modules)
def test_sf_1513611():
# Bug report: http://www.python.org/sf/1513611
sio = StringIO("invalid")
parser = make_parser()
from xml.sax import SAXParseException
try:
parser.parse(sio)
except SAXParseException:
return True
else:
return False
# ===== Main program # ===== Main program
def make_test_output(): def make_test_output():
......
# xmlcore.etree test. This file contains enough tests to make sure that # xml.etree test. This file contains enough tests to make sure that
# all included components work as they should. For a more extensive # all included components work as they should. For a more extensive
# test suite, see the selftest script in the ElementTree distribution. # test suite, see the selftest script in the ElementTree distribution.
...@@ -6,8 +6,6 @@ import doctest, sys ...@@ -6,8 +6,6 @@ import doctest, sys
from test import test_support from test import test_support
from xmlcore.etree import ElementTree as ET
SAMPLE_XML = """ SAMPLE_XML = """
<body> <body>
<tag>text</tag> <tag>text</tag>
...@@ -32,9 +30,9 @@ def sanity(): ...@@ -32,9 +30,9 @@ def sanity():
""" """
Import sanity. Import sanity.
>>> from xmlcore.etree import ElementTree >>> from xml.etree import ElementTree
>>> from xmlcore.etree import ElementInclude >>> from xml.etree import ElementInclude
>>> from xmlcore.etree import ElementPath >>> from xml.etree import ElementPath
""" """
def check_method(method): def check_method(method):
...@@ -61,6 +59,8 @@ def interface(): ...@@ -61,6 +59,8 @@ def interface():
""" """
Test element tree interface. Test element tree interface.
>>> from xml.etree import ElementTree as ET
>>> element = ET.Element("tag", key="value") >>> element = ET.Element("tag", key="value")
>>> tree = ET.ElementTree(element) >>> tree = ET.ElementTree(element)
...@@ -108,6 +108,8 @@ def find(): ...@@ -108,6 +108,8 @@ def find():
""" """
Test find methods (including xpath syntax). Test find methods (including xpath syntax).
>>> from xml.etree import ElementTree as ET
>>> elem = ET.XML(SAMPLE_XML) >>> elem = ET.XML(SAMPLE_XML)
>>> elem.find("tag").tag >>> elem.find("tag").tag
'tag' 'tag'
...@@ -174,6 +176,8 @@ def find(): ...@@ -174,6 +176,8 @@ def find():
def parseliteral(): def parseliteral():
r""" r"""
>>> from xml.etree import ElementTree as ET
>>> element = ET.XML("<html><body>text</body></html>") >>> element = ET.XML("<html><body>text</body></html>")
>>> ET.ElementTree(element).write(sys.stdout) >>> ET.ElementTree(element).write(sys.stdout)
<html><body>text</body></html> <html><body>text</body></html>
...@@ -195,19 +199,6 @@ def parseliteral(): ...@@ -195,19 +199,6 @@ def parseliteral():
'body' 'body'
""" """
def check_encoding(encoding):
"""
>>> check_encoding("ascii")
>>> check_encoding("us-ascii")
>>> check_encoding("iso-8859-1")
>>> check_encoding("iso-8859-15")
>>> check_encoding("cp437")
>>> check_encoding("mac-roman")
"""
ET.XML(
"<?xml version='1.0' encoding='%s'?><xml />" % encoding
)
# #
# xinclude tests (samples from appendix C of the xinclude specification) # xinclude tests (samples from appendix C of the xinclude specification)
...@@ -282,14 +273,16 @@ def xinclude_loader(href, parse="xml", encoding=None): ...@@ -282,14 +273,16 @@ def xinclude_loader(href, parse="xml", encoding=None):
except KeyError: except KeyError:
raise IOError("resource not found") raise IOError("resource not found")
if parse == "xml": if parse == "xml":
return ET.XML(data) from xml.etree.ElementTree import XML
return XML(data)
return data return data
def xinclude(): def xinclude():
r""" r"""
Basic inclusion example (XInclude C.1) Basic inclusion example (XInclude C.1)
>>> from xmlcore.etree import ElementInclude >>> from xml.etree import ElementTree as ET
>>> from xml.etree import ElementInclude
>>> document = xinclude_loader("C1.xml") >>> document = xinclude_loader("C1.xml")
>>> ElementInclude.include(document, xinclude_loader) >>> ElementInclude.include(document, xinclude_loader)
......
# xmlcore.etree test for cElementTree # xml.etree test for cElementTree
import doctest, sys import doctest, sys
from test import test_support from test import test_support
from xmlcore.etree import cElementTree as ET from xml.etree import cElementTree as ET
SAMPLE_XML = """ SAMPLE_XML = """
<body> <body>
...@@ -30,7 +30,7 @@ def sanity(): ...@@ -30,7 +30,7 @@ def sanity():
""" """
Import sanity. Import sanity.
>>> from xmlcore.etree import cElementTree >>> from xml.etree import cElementTree
""" """
def check_method(method): def check_method(method):
......
...@@ -16,8 +16,6 @@ etree -- The ElementTree XML library. This is a subset of the full ...@@ -16,8 +16,6 @@ etree -- The ElementTree XML library. This is a subset of the full
""" """
import sys
import xmlcore
__all__ = ["dom", "parsers", "sax", "etree"] __all__ = ["dom", "parsers", "sax", "etree"]
...@@ -29,10 +27,11 @@ __version__ = "$Revision$".split()[-2:][0] ...@@ -29,10 +27,11 @@ __version__ = "$Revision$".split()[-2:][0]
_MINIMUM_XMLPLUS_VERSION = (0, 8, 4) _MINIMUM_XMLPLUS_VERSION = (0, 8, 4)
try: try:
import _xmlplus import _xmlplus
except ImportError: except ImportError:
sys.modules[__name__] = xmlcore pass
else: else:
try: try:
v = _xmlplus.version_info v = _xmlplus.version_info
...@@ -41,7 +40,8 @@ else: ...@@ -41,7 +40,8 @@ else:
pass pass
else: else:
if v >= _MINIMUM_XMLPLUS_VERSION: if v >= _MINIMUM_XMLPLUS_VERSION:
_xmlplus.__path__.extend(xmlcore.__path__) import sys
_xmlplus.__path__.extend(__path__)
sys.modules[__name__] = _xmlplus sys.modules[__name__] = _xmlplus
else: else:
del v del v
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
directly. Instead, the functions getDOMImplementation and directly. Instead, the functions getDOMImplementation and
registerDOMImplementation should be imported from xml.dom.""" registerDOMImplementation should be imported from xml.dom."""
from xmlcore.dom.minicompat import * # isinstance, StringTypes from xml.dom.minicompat import * # isinstance, StringTypes
# This is a list of well-known implementations. Well-known names # This is a list of well-known implementations. Well-known names
# should be published by posting to xml-sig@python.org, and are # should be published by posting to xml-sig@python.org, and are
......
...@@ -27,13 +27,13 @@ This avoids all the overhead of SAX and pulldom to gain performance. ...@@ -27,13 +27,13 @@ This avoids all the overhead of SAX and pulldom to gain performance.
# calling any methods on the node object if it exists. (A rather # calling any methods on the node object if it exists. (A rather
# nice speedup is achieved this way as well!) # nice speedup is achieved this way as well!)
from xmlcore.dom import xmlbuilder, minidom, Node from xml.dom import xmlbuilder, minidom, Node
from xmlcore.dom import EMPTY_NAMESPACE, EMPTY_PREFIX, XMLNS_NAMESPACE from xml.dom import EMPTY_NAMESPACE, EMPTY_PREFIX, XMLNS_NAMESPACE
from xmlcore.parsers import expat from xml.parsers import expat
from xmlcore.dom.minidom import _append_child, _set_attribute_node from xml.dom.minidom import _append_child, _set_attribute_node
from xmlcore.dom.NodeFilter import NodeFilter from xml.dom.NodeFilter import NodeFilter
from xmlcore.dom.minicompat import * from xml.dom.minicompat import *
TEXT_NODE = Node.TEXT_NODE TEXT_NODE = Node.TEXT_NODE
CDATA_SECTION_NODE = Node.CDATA_SECTION_NODE CDATA_SECTION_NODE = Node.CDATA_SECTION_NODE
......
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
__all__ = ["NodeList", "EmptyNodeList", "StringTypes", "defproperty"] __all__ = ["NodeList", "EmptyNodeList", "StringTypes", "defproperty"]
import xmlcore.dom import xml.dom
try: try:
unicode unicode
...@@ -71,6 +71,7 @@ class NodeList(list): ...@@ -71,6 +71,7 @@ class NodeList(list):
def __setstate__(self, state): def __setstate__(self, state):
self[:] = state self[:] = state
class EmptyNodeList(tuple): class EmptyNodeList(tuple):
__slots__ = () __slots__ = ()
......
import xmlcore.sax import xml.sax
import xmlcore.sax.handler import xml.sax.handler
import types import types
try: try:
...@@ -16,12 +16,12 @@ PROCESSING_INSTRUCTION = "PROCESSING_INSTRUCTION" ...@@ -16,12 +16,12 @@ PROCESSING_INSTRUCTION = "PROCESSING_INSTRUCTION"
IGNORABLE_WHITESPACE = "IGNORABLE_WHITESPACE" IGNORABLE_WHITESPACE = "IGNORABLE_WHITESPACE"
CHARACTERS = "CHARACTERS" CHARACTERS = "CHARACTERS"
class PullDOM(xmlcore.sax.ContentHandler): class PullDOM(xml.sax.ContentHandler):
_locator = None _locator = None
document = None document = None
def __init__(self, documentFactory=None): def __init__(self, documentFactory=None):
from xmlcore.dom import XML_NAMESPACE from xml.dom import XML_NAMESPACE
self.documentFactory = documentFactory self.documentFactory = documentFactory
self.firstEvent = [None, None] self.firstEvent = [None, None]
self.lastEvent = self.firstEvent self.lastEvent = self.firstEvent
...@@ -164,8 +164,8 @@ class PullDOM(xmlcore.sax.ContentHandler): ...@@ -164,8 +164,8 @@ class PullDOM(xmlcore.sax.ContentHandler):
def startDocument(self): def startDocument(self):
if self.documentFactory is None: if self.documentFactory is None:
import xmlcore.dom.minidom import xml.dom.minidom
self.documentFactory = xmlcore.dom.minidom.Document.implementation self.documentFactory = xml.dom.minidom.Document.implementation
def buildDocument(self, uri, tagname): def buildDocument(self, uri, tagname):
# Can't do that in startDocument, since we need the tagname # Can't do that in startDocument, since we need the tagname
...@@ -219,7 +219,7 @@ class DOMEventStream: ...@@ -219,7 +219,7 @@ class DOMEventStream:
def reset(self): def reset(self):
self.pulldom = PullDOM() self.pulldom = PullDOM()
# This content handler relies on namespace support # This content handler relies on namespace support
self.parser.setFeature(xmlcore.sax.handler.feature_namespaces, 1) self.parser.setFeature(xml.sax.handler.feature_namespaces, 1)
self.parser.setContentHandler(self.pulldom) self.parser.setContentHandler(self.pulldom)
def __getitem__(self, pos): def __getitem__(self, pos):
...@@ -335,7 +335,7 @@ def parse(stream_or_string, parser=None, bufsize=None): ...@@ -335,7 +335,7 @@ def parse(stream_or_string, parser=None, bufsize=None):
else: else:
stream = stream_or_string stream = stream_or_string
if not parser: if not parser:
parser = xmlcore.sax.make_parser() parser = xml.sax.make_parser()
return DOMEventStream(stream, parser, bufsize) return DOMEventStream(stream, parser, bufsize)
def parseString(string, parser=None): def parseString(string, parser=None):
...@@ -347,5 +347,5 @@ def parseString(string, parser=None): ...@@ -347,5 +347,5 @@ def parseString(string, parser=None):
bufsize = len(string) bufsize = len(string)
buf = StringIO(string) buf = StringIO(string)
if not parser: if not parser:
parser = xmlcore.sax.make_parser() parser = xml.sax.make_parser()
return DOMEventStream(buf, parser, bufsize) return DOMEventStream(buf, parser, bufsize)
"""Implementation of the DOM Level 3 'LS-Load' feature.""" """Implementation of the DOM Level 3 'LS-Load' feature."""
import copy import copy
import xmlcore.dom import xml.dom
from xmlcore.dom.NodeFilter import NodeFilter from xml.dom.NodeFilter import NodeFilter
__all__ = ["DOMBuilder", "DOMEntityResolver", "DOMInputSource"] __all__ = ["DOMBuilder", "DOMEntityResolver", "DOMInputSource"]
...@@ -78,13 +78,13 @@ class DOMBuilder: ...@@ -78,13 +78,13 @@ class DOMBuilder:
try: try:
settings = self._settings[(_name_xform(name), state)] settings = self._settings[(_name_xform(name), state)]
except KeyError: except KeyError:
raise xmlcore.dom.NotSupportedErr( raise xml.dom.NotSupportedErr(
"unsupported feature: %r" % (name,)) "unsupported feature: %r" % (name,))
else: else:
for name, value in settings: for name, value in settings:
setattr(self._options, name, value) setattr(self._options, name, value)
else: else:
raise xmlcore.dom.NotFoundErr("unknown feature: " + repr(name)) raise xml.dom.NotFoundErr("unknown feature: " + repr(name))
def supportsFeature(self, name): def supportsFeature(self, name):
return hasattr(self._options, _name_xform(name)) return hasattr(self._options, _name_xform(name))
...@@ -175,7 +175,7 @@ class DOMBuilder: ...@@ -175,7 +175,7 @@ class DOMBuilder:
or options.create_entity_ref_nodes or options.create_entity_ref_nodes
or options.entities or options.entities
or options.cdata_sections)) or options.cdata_sections))
raise xmlcore.dom.NotFoundErr("feature %s not known" % repr(name)) raise xml.dom.NotFoundErr("feature %s not known" % repr(name))
def parseURI(self, uri): def parseURI(self, uri):
if self.entityResolver: if self.entityResolver:
...@@ -200,8 +200,8 @@ class DOMBuilder: ...@@ -200,8 +200,8 @@ class DOMBuilder:
raise NotImplementedError("Haven't written this yet...") raise NotImplementedError("Haven't written this yet...")
def _parse_bytestream(self, stream, options): def _parse_bytestream(self, stream, options):
import xmlcore.dom.expatbuilder import xml.dom.expatbuilder
builder = xmlcore.dom.expatbuilder.makeBuilder(options) builder = xml.dom.expatbuilder.makeBuilder(options)
return builder.parseFile(stream) return builder.parseFile(stream)
...@@ -340,7 +340,7 @@ class DocumentLS: ...@@ -340,7 +340,7 @@ class DocumentLS:
return False return False
def _set_async(self, async): def _set_async(self, async):
if async: if async:
raise xmlcore.dom.NotSupportedErr( raise xml.dom.NotSupportedErr(
"asynchronous document loading is not supported") "asynchronous document loading is not supported")
def abort(self): def abort(self):
...@@ -359,7 +359,7 @@ class DocumentLS: ...@@ -359,7 +359,7 @@ class DocumentLS:
if snode is None: if snode is None:
snode = self snode = self
elif snode.ownerDocument is not self: elif snode.ownerDocument is not self:
raise xmlcore.dom.WrongDocumentErr() raise xml.dom.WrongDocumentErr()
return snode.toxml() return snode.toxml()
...@@ -369,12 +369,12 @@ class DOMImplementationLS: ...@@ -369,12 +369,12 @@ class DOMImplementationLS:
def createDOMBuilder(self, mode, schemaType): def createDOMBuilder(self, mode, schemaType):
if schemaType is not None: if schemaType is not None:
raise xmlcore.dom.NotSupportedErr( raise xml.dom.NotSupportedErr(
"schemaType not yet supported") "schemaType not yet supported")
if mode == self.MODE_SYNCHRONOUS: if mode == self.MODE_SYNCHRONOUS:
return DOMBuilder() return DOMBuilder()
if mode == self.MODE_ASYNCHRONOUS: if mode == self.MODE_ASYNCHRONOUS:
raise xmlcore.dom.NotSupportedErr( raise xml.dom.NotSupportedErr(
"asynchronous builders are not supported") "asynchronous builders are not supported")
raise ValueError("unknown value for mode") raise ValueError("unknown value for mode")
......
...@@ -1112,7 +1112,7 @@ class XMLTreeBuilder: ...@@ -1112,7 +1112,7 @@ class XMLTreeBuilder:
def __init__(self, html=0, target=None): def __init__(self, html=0, target=None):
try: try:
from xmlcore.parsers import expat from xml.parsers import expat
except ImportError: except ImportError:
raise ImportError( raise ImportError(
"No module named expat; use SimpleXMLTreeBuilder instead" "No module named expat; use SimpleXMLTreeBuilder instead"
...@@ -1194,7 +1194,7 @@ class XMLTreeBuilder: ...@@ -1194,7 +1194,7 @@ class XMLTreeBuilder:
try: try:
self._target.data(self.entity[text[1:-1]]) self._target.data(self.entity[text[1:-1]])
except KeyError: except KeyError:
from xmlcore.parsers import expat from xml.parsers import expat
raise expat.error( raise expat.error(
"undefined entity %s: line %d, column %d" % "undefined entity %s: line %d, column %d" %
(text, self._parser.ErrorLineNumber, (text, self._parser.ErrorLineNumber,
......
...@@ -51,12 +51,12 @@ def parseString(string, handler, errorHandler=ErrorHandler()): ...@@ -51,12 +51,12 @@ def parseString(string, handler, errorHandler=ErrorHandler()):
# this is the parser list used by the make_parser function if no # this is the parser list used by the make_parser function if no
# alternatives are given as parameters to the function # alternatives are given as parameters to the function
default_parser_list = ["xmlcore.sax.expatreader"] default_parser_list = ["xml.sax.expatreader"]
# tell modulefinder that importing sax potentially imports expatreader # tell modulefinder that importing sax potentially imports expatreader
_false = 0 _false = 0
if _false: if _false:
import xmlcore.sax.expatreader import xml.sax.expatreader
import os, sys import os, sys
if os.environ.has_key("PY_SAX_PARSER"): if os.environ.has_key("PY_SAX_PARSER"):
......
...@@ -5,27 +5,27 @@ pyexpat.__version__ == '2.22'. ...@@ -5,27 +5,27 @@ pyexpat.__version__ == '2.22'.
version = "0.20" version = "0.20"
from xmlcore.sax._exceptions import * from xml.sax._exceptions import *
from xmlcore.sax.handler import feature_validation, feature_namespaces from xml.sax.handler import feature_validation, feature_namespaces
from xmlcore.sax.handler import feature_namespace_prefixes from xml.sax.handler import feature_namespace_prefixes
from xmlcore.sax.handler import feature_external_ges, feature_external_pes from xml.sax.handler import feature_external_ges, feature_external_pes
from xmlcore.sax.handler import feature_string_interning from xml.sax.handler import feature_string_interning
from xmlcore.sax.handler import property_xml_string, property_interning_dict from xml.sax.handler import property_xml_string, property_interning_dict
# xmlcore.parsers.expat does not raise ImportError in Jython # xml.parsers.expat does not raise ImportError in Jython
import sys import sys
if sys.platform[:4] == "java": if sys.platform[:4] == "java":
raise SAXReaderNotAvailable("expat not available in Java", None) raise SAXReaderNotAvailable("expat not available in Java", None)
del sys del sys
try: try:
from xmlcore.parsers import expat from xml.parsers import expat
except ImportError: except ImportError:
raise SAXReaderNotAvailable("expat not supported", None) raise SAXReaderNotAvailable("expat not supported", None)
else: else:
if not hasattr(expat, "ParserCreate"): if not hasattr(expat, "ParserCreate"):
raise SAXReaderNotAvailable("expat not supported", None) raise SAXReaderNotAvailable("expat not supported", None)
from xmlcore.sax import xmlreader, saxutils, handler from xml.sax import xmlreader, saxutils, handler
AttributesImpl = xmlreader.AttributesImpl AttributesImpl = xmlreader.AttributesImpl
AttributesNSImpl = xmlreader.AttributesNSImpl AttributesNSImpl = xmlreader.AttributesNSImpl
...@@ -407,8 +407,8 @@ def create_parser(*args, **kwargs): ...@@ -407,8 +407,8 @@ def create_parser(*args, **kwargs):
# --- # ---
if __name__ == "__main__": if __name__ == "__main__":
import xmlcore.sax import xml.sax
p = create_parser() p = create_parser()
p.setContentHandler(xmlcore.sax.XMLGenerator()) p.setContentHandler(xml.sax.XMLGenerator())
p.setErrorHandler(xmlcore.sax.ErrorHandler()) p.setErrorHandler(xml.sax.ErrorHandler())
p.parse("../../../hamlet.xml") p.parse("../../../hamlet.xml")
"""Core XML support for Python.
This package contains four sub-packages:
dom -- The W3C Document Object Model. This supports DOM Level 1 +
Namespaces.
parsers -- Python wrappers for XML parsers (currently only supports Expat).
sax -- The Simple API for XML, developed by XML-Dev, led by David
Megginson and ported to Python by Lars Marius Garshol. This
supports the SAX 2 API.
etree -- The ElementTree XML library. This is a subset of the full
ElementTree XML release.
"""
__all__ = ["dom", "parsers", "sax", "etree"]
...@@ -695,7 +695,7 @@ PLATDIR= plat-$(MACHDEP) ...@@ -695,7 +695,7 @@ PLATDIR= plat-$(MACHDEP)
EXTRAPLATDIR= @EXTRAPLATDIR@ EXTRAPLATDIR= @EXTRAPLATDIR@
EXTRAMACHDEPPATH=@EXTRAMACHDEPPATH@ EXTRAMACHDEPPATH=@EXTRAMACHDEPPATH@
MACHDEPS= $(PLATDIR) $(EXTRAPLATDIR) MACHDEPS= $(PLATDIR) $(EXTRAPLATDIR)
XMLLIBSUBDIRS= xmlcore xmlcore/dom xmlcore/etree xmlcore/parsers xmlcore/sax XMLLIBSUBDIRS= xml xml/dom xml/etree xml/parsers xml/sax
PLATMACDIRS= plat-mac plat-mac/Carbon plat-mac/lib-scriptpackages \ PLATMACDIRS= plat-mac plat-mac/Carbon plat-mac/lib-scriptpackages \
plat-mac/lib-scriptpackages/_builtinSuites \ plat-mac/lib-scriptpackages/_builtinSuites \
plat-mac/lib-scriptpackages/CodeWarrior \ plat-mac/lib-scriptpackages/CodeWarrior \
......
...@@ -52,6 +52,10 @@ Core and builtins ...@@ -52,6 +52,10 @@ Core and builtins
Library Library
------- -------
- Rename of the xml package to xmlcore, and the import hackery done to
make it appear at both names, has been removed. Bug #1511497,
#1513611, and probably others.
- Bug #1441397: The compiler module now recognizes module and function - Bug #1441397: The compiler module now recognizes module and function
docstrings correctly as it did in Python 2.4. docstrings correctly as it did in Python 2.4.
...@@ -1640,8 +1644,8 @@ Library ...@@ -1640,8 +1644,8 @@ Library
- Bug #792570: SimpleXMLRPCServer had problems if the request grew too large. - Bug #792570: SimpleXMLRPCServer had problems if the request grew too large.
Fixed by reading the HTTP body in chunks instead of one big socket.read(). Fixed by reading the HTTP body in chunks instead of one big socket.read().
- Patches #893642, #1039083: add allow_none, encoding arguments to constructors of - Patches #893642, #1039083: add allow_none, encoding arguments to
SimpleXMLRPCServer and CGIXMLRPCRequestHandler. constructors of SimpleXMLRPCServer and CGIXMLRPCRequestHandler.
- Bug #1110478: Revert os.environ.update to do putenv again. - Bug #1110478: Revert os.environ.update to do putenv again.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment