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

move the xml package implementation to xmlcore, and adjust the tests to

test that package, not the xmlcore/PyXML switcheroo fiasco in the xml
module/package
üst cc117dbb
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 xml.sax import make_parser, ContentHandler, \ from xmlcore.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 xml.sax.saxutils import XMLGenerator, escape, unescape, quoteattr, \ from xmlcore.sax.saxutils import XMLGenerator, escape, unescape, quoteattr, \
XMLFilterBase XMLFilterBase
from xml.sax.expatreader import create_parser from xmlcore.sax.expatreader import create_parser
from xml.sax.xmlreader import InputSource, AttributesImpl, AttributesNSImpl from xmlcore.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 xml.sax import make_parser from xmlcore.sax import make_parser
p = make_parser() p = make_parser()
from xml.sax import make_parser from xmlcore.sax import make_parser
p = make_parser() p = make_parser()
from xml.sax import make_parser from xmlcore.sax import make_parser
p = make_parser() p = make_parser()
from xml.sax import make_parser from xmlcore.sax import make_parser
p = make_parser() p = make_parser()
from xml.sax import make_parser from xmlcore.sax import make_parser
p = make_parser() p = make_parser()
from xml.sax import make_parser from xmlcore.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(['xml.parsers.no_such_parser']) p = make_parser(['xmlcore.parsers.no_such_parser'])
except: except:
return 0 return 0
else: else:
......
# xml.etree test. This file contains enough tests to make sure that # xmlcore.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.
...@@ -30,9 +30,9 @@ def sanity(): ...@@ -30,9 +30,9 @@ def sanity():
""" """
Import sanity. Import sanity.
>>> from xml.etree import ElementTree >>> from xmlcore.etree import ElementTree
>>> from xml.etree import ElementInclude >>> from xmlcore.etree import ElementInclude
>>> from xml.etree import ElementPath >>> from xmlcore.etree import ElementPath
""" """
def check_method(method): def check_method(method):
...@@ -59,7 +59,7 @@ def interface(): ...@@ -59,7 +59,7 @@ def interface():
""" """
Test element tree interface. Test element tree interface.
>>> from xml.etree import ElementTree as ET >>> from xmlcore.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,7 +108,7 @@ def find(): ...@@ -108,7 +108,7 @@ def find():
""" """
Test find methods (including xpath syntax). Test find methods (including xpath syntax).
>>> from xml.etree import ElementTree as ET >>> from xmlcore.etree import ElementTree as ET
>>> elem = ET.XML(SAMPLE_XML) >>> elem = ET.XML(SAMPLE_XML)
>>> elem.find("tag").tag >>> elem.find("tag").tag
...@@ -176,7 +176,7 @@ def find(): ...@@ -176,7 +176,7 @@ def find():
def parseliteral(): def parseliteral():
r""" r"""
>>> from xml.etree import ElementTree as ET >>> from xmlcore.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)
...@@ -273,7 +273,7 @@ def xinclude_loader(href, parse="xml", encoding=None): ...@@ -273,7 +273,7 @@ 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":
from xml.etree.ElementTree import XML from xmlcore.etree.ElementTree import XML
return XML(data) return XML(data)
return data return data
...@@ -281,8 +281,8 @@ def xinclude(): ...@@ -281,8 +281,8 @@ def xinclude():
r""" r"""
Basic inclusion example (XInclude C.1) Basic inclusion example (XInclude C.1)
>>> from xml.etree import ElementTree as ET >>> from xmlcore.etree import ElementTree as ET
>>> from xml.etree import ElementInclude >>> from xmlcore.etree import ElementInclude
>>> document = xinclude_loader("C1.xml") >>> document = xinclude_loader("C1.xml")
>>> ElementInclude.include(document, xinclude_loader) >>> ElementInclude.include(document, xinclude_loader)
......
...@@ -16,6 +16,8 @@ etree -- The ElementTree XML library. This is a subset of the full ...@@ -16,6 +16,8 @@ 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"]
...@@ -27,11 +29,10 @@ __version__ = "$Revision$".split()[-2:][0] ...@@ -27,11 +29,10 @@ __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:
pass sys.modules[__name__] = xmlcore
else: else:
try: try:
v = _xmlplus.version_info v = _xmlplus.version_info
...@@ -40,8 +41,7 @@ else: ...@@ -40,8 +41,7 @@ else:
pass pass
else: else:
if v >= _MINIMUM_XMLPLUS_VERSION: if v >= _MINIMUM_XMLPLUS_VERSION:
import sys _xmlplus.__path__.extend(xmlcore.__path__)
_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 xml.dom.minicompat import * # isinstance, StringTypes from xmlcore.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 xml.dom import xmlbuilder, minidom, Node from xmlcore.dom import xmlbuilder, minidom, Node
from xml.dom import EMPTY_NAMESPACE, EMPTY_PREFIX, XMLNS_NAMESPACE from xmlcore.dom import EMPTY_NAMESPACE, EMPTY_PREFIX, XMLNS_NAMESPACE
from xml.parsers import expat from xmlcore.parsers import expat
from xml.dom.minidom import _append_child, _set_attribute_node from xmlcore.dom.minidom import _append_child, _set_attribute_node
from xml.dom.NodeFilter import NodeFilter from xmlcore.dom.NodeFilter import NodeFilter
from xml.dom.minicompat import * from xmlcore.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
......
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
__all__ = ["NodeList", "EmptyNodeList", "NewStyle", __all__ = ["NodeList", "EmptyNodeList", "NewStyle",
"StringTypes", "defproperty", "GetattrMagic"] "StringTypes", "defproperty", "GetattrMagic"]
import xml.dom import xmlcore.dom
try: try:
unicode unicode
...@@ -100,7 +100,7 @@ if list is type([]): ...@@ -100,7 +100,7 @@ if list is type([]):
return len(self) return len(self)
def _set_length(self, value): def _set_length(self, value):
raise xml.dom.NoModificationAllowedErr( raise xmlcore.dom.NoModificationAllowedErr(
"attempt to modify read-only attribute 'length'") "attempt to modify read-only attribute 'length'")
length = property(_get_length, _set_length, length = property(_get_length, _set_length,
...@@ -132,7 +132,7 @@ if list is type([]): ...@@ -132,7 +132,7 @@ if list is type([]):
return 0 return 0
def _set_length(self, value): def _set_length(self, value):
raise xml.dom.NoModificationAllowedErr( raise xmlcore.dom.NoModificationAllowedErr(
"attempt to modify read-only attribute 'length'") "attempt to modify read-only attribute 'length'")
length = property(_get_length, _set_length, length = property(_get_length, _set_length,
...@@ -171,7 +171,7 @@ else: ...@@ -171,7 +171,7 @@ else:
def defproperty(klass, name, doc): def defproperty(klass, name, doc):
get = getattr(klass, ("_get_" + name)).im_func get = getattr(klass, ("_get_" + name)).im_func
def set(self, value, name=name): def set(self, value, name=name):
raise xml.dom.NoModificationAllowedErr( raise xmlcore.dom.NoModificationAllowedErr(
"attempt to modify read-only attribute " + repr(name)) "attempt to modify read-only attribute " + repr(name))
assert not hasattr(klass, "_set_" + name), \ assert not hasattr(klass, "_set_" + name), \
"expected not to find _set_" + name "expected not to find _set_" + name
......
import xml.sax import xmlcore.sax
import xml.sax.handler import xmlcore.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(xml.sax.ContentHandler): class PullDOM(xmlcore.sax.ContentHandler):
_locator = None _locator = None
document = None document = None
def __init__(self, documentFactory=None): def __init__(self, documentFactory=None):
from xml.dom import XML_NAMESPACE from xmlcore.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(xml.sax.ContentHandler): ...@@ -164,8 +164,8 @@ class PullDOM(xml.sax.ContentHandler):
def startDocument(self): def startDocument(self):
if self.documentFactory is None: if self.documentFactory is None:
import xml.dom.minidom import xmlcore.dom.minidom
self.documentFactory = xml.dom.minidom.Document.implementation self.documentFactory = xmlcore.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(xml.sax.handler.feature_namespaces, 1) self.parser.setFeature(xmlcore.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 = xml.sax.make_parser() parser = xmlcore.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 = xml.sax.make_parser() parser = xmlcore.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 xml.dom import xmlcore.dom
from xml.dom.minicompat import * from xmlcore.dom.minicompat import *
from xml.dom.NodeFilter import NodeFilter from xmlcore.dom.NodeFilter import NodeFilter
__all__ = ["DOMBuilder", "DOMEntityResolver", "DOMInputSource"] __all__ = ["DOMBuilder", "DOMEntityResolver", "DOMInputSource"]
...@@ -80,13 +80,13 @@ class DOMBuilder: ...@@ -80,13 +80,13 @@ class DOMBuilder:
try: try:
settings = self._settings[(_name_xform(name), state)] settings = self._settings[(_name_xform(name), state)]
except KeyError: except KeyError:
raise xml.dom.NotSupportedErr( raise xmlcore.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 xml.dom.NotFoundErr("unknown feature: " + repr(name)) raise xmlcore.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))
...@@ -177,7 +177,7 @@ class DOMBuilder: ...@@ -177,7 +177,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 xml.dom.NotFoundErr("feature %s not known" % repr(name)) raise xmlcore.dom.NotFoundErr("feature %s not known" % repr(name))
def parseURI(self, uri): def parseURI(self, uri):
if self.entityResolver: if self.entityResolver:
...@@ -202,8 +202,8 @@ class DOMBuilder: ...@@ -202,8 +202,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 xml.dom.expatbuilder import xmlcore.dom.expatbuilder
builder = xml.dom.expatbuilder.makeBuilder(options) builder = xmlcore.dom.expatbuilder.makeBuilder(options)
return builder.parseFile(stream) return builder.parseFile(stream)
...@@ -342,7 +342,7 @@ class DocumentLS: ...@@ -342,7 +342,7 @@ class DocumentLS:
return False return False
def _set_async(self, async): def _set_async(self, async):
if async: if async:
raise xml.dom.NotSupportedErr( raise xmlcore.dom.NotSupportedErr(
"asynchronous document loading is not supported") "asynchronous document loading is not supported")
def abort(self): def abort(self):
...@@ -361,7 +361,7 @@ class DocumentLS: ...@@ -361,7 +361,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 xml.dom.WrongDocumentErr() raise xmlcore.dom.WrongDocumentErr()
return snode.toxml() return snode.toxml()
...@@ -371,12 +371,12 @@ class DOMImplementationLS: ...@@ -371,12 +371,12 @@ class DOMImplementationLS:
def createDOMBuilder(self, mode, schemaType): def createDOMBuilder(self, mode, schemaType):
if schemaType is not None: if schemaType is not None:
raise xml.dom.NotSupportedErr( raise xmlcore.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 xml.dom.NotSupportedErr( raise xmlcore.dom.NotSupportedErr(
"asynchronous builders are not supported") "asynchronous builders are not supported")
raise ValueError("unknown value for mode") raise ValueError("unknown value for mode")
......
...@@ -1109,7 +1109,7 @@ class XMLTreeBuilder: ...@@ -1109,7 +1109,7 @@ class XMLTreeBuilder:
def __init__(self, html=0, target=None): def __init__(self, html=0, target=None):
try: try:
from xml.parsers import expat from xmlcore.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"
...@@ -1191,7 +1191,7 @@ class XMLTreeBuilder: ...@@ -1191,7 +1191,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 xml.parsers import expat from xmlcore.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 = ["xml.sax.expatreader"] default_parser_list = ["xmlcore.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 xml.sax.expatreader import xmlcore.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 xml.sax._exceptions import * from xmlcore.sax._exceptions import *
from xml.sax.handler import feature_validation, feature_namespaces from xmlcore.sax.handler import feature_validation, feature_namespaces
from xml.sax.handler import feature_namespace_prefixes from xmlcore.sax.handler import feature_namespace_prefixes
from xml.sax.handler import feature_external_ges, feature_external_pes from xmlcore.sax.handler import feature_external_ges, feature_external_pes
from xml.sax.handler import feature_string_interning from xmlcore.sax.handler import feature_string_interning
from xml.sax.handler import property_xml_string, property_interning_dict from xmlcore.sax.handler import property_xml_string, property_interning_dict
# xml.parsers.expat does not raise ImportError in Jython # xmlcore.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 xml.parsers import expat from xmlcore.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 xml.sax import xmlreader, saxutils, handler from xmlcore.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 xml.sax import xmlcore.sax
p = create_parser() p = create_parser()
p.setContentHandler(xml.sax.XMLGenerator()) p.setContentHandler(xmlcore.sax.XMLGenerator())
p.setErrorHandler(xml.sax.ErrorHandler()) p.setErrorHandler(xmlcore.sax.ErrorHandler())
p.parse("../../../hamlet.xml") p.parse("../../../hamlet.xml")
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