mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
Issue #13988: move the python bootstrap code to cElementTree.py, and remove obsolete code for Python 2.4 and 2.5.
This commit is contained in:
parent
44fb613816
commit
f4bdf4e478
2 changed files with 152 additions and 232 deletions
|
@ -1,3 +1,153 @@
|
|||
# Wrapper module for _elementtree
|
||||
|
||||
from xml.etree.ElementTree import (ElementTree, dump, iselement, QName,
|
||||
fromstringlist,
|
||||
tostring, tostringlist, VERSION)
|
||||
# These ones are not in ElementTree.__all__
|
||||
from xml.etree.ElementTree import ElementPath, register_namespace
|
||||
|
||||
# Import the C accelerators:
|
||||
# Element, SubElement, TreeBuilder, XMLParser, ParseError
|
||||
from _elementtree import *
|
||||
|
||||
|
||||
class ElementTree(ElementTree):
|
||||
|
||||
def parse(self, source, parser=None):
|
||||
close_source = False
|
||||
if not hasattr(source, 'read'):
|
||||
source = open(source, 'rb')
|
||||
close_source = True
|
||||
try:
|
||||
if parser is not None:
|
||||
while True:
|
||||
data = source.read(65536)
|
||||
if not data:
|
||||
break
|
||||
parser.feed(data)
|
||||
self._root = parser.close()
|
||||
else:
|
||||
parser = XMLParser()
|
||||
self._root = parser._parse(source)
|
||||
return self._root
|
||||
finally:
|
||||
if close_source:
|
||||
source.close()
|
||||
|
||||
|
||||
class iterparse:
|
||||
root = None
|
||||
|
||||
def __init__(self, file, events=None):
|
||||
self._close_file = False
|
||||
if not hasattr(file, 'read'):
|
||||
file = open(file, 'rb')
|
||||
self._close_file = True
|
||||
self._file = file
|
||||
self._events = []
|
||||
self._index = 0
|
||||
self._error = None
|
||||
self.root = self._root = None
|
||||
b = TreeBuilder()
|
||||
self._parser = XMLParser(b)
|
||||
self._parser._setevents(self._events, events)
|
||||
|
||||
def __next__(self):
|
||||
while True:
|
||||
try:
|
||||
item = self._events[self._index]
|
||||
self._index += 1
|
||||
return item
|
||||
except IndexError:
|
||||
pass
|
||||
if self._error:
|
||||
e = self._error
|
||||
self._error = None
|
||||
raise e
|
||||
if self._parser is None:
|
||||
self.root = self._root
|
||||
if self._close_file:
|
||||
self._file.close()
|
||||
raise StopIteration
|
||||
# load event buffer
|
||||
del self._events[:]
|
||||
self._index = 0
|
||||
data = self._file.read(16384)
|
||||
if data:
|
||||
try:
|
||||
self._parser.feed(data)
|
||||
except SyntaxError as exc:
|
||||
self._error = exc
|
||||
else:
|
||||
self._root = self._parser.close()
|
||||
self._parser = None
|
||||
|
||||
def __iter__(self):
|
||||
return self
|
||||
|
||||
|
||||
# =============================================================================
|
||||
#
|
||||
# Everything below this line can be removed
|
||||
# after cElementTree is folded behind ElementTree.
|
||||
#
|
||||
# =============================================================================
|
||||
|
||||
from xml.etree.ElementTree import Comment as _Comment, PI as _PI
|
||||
|
||||
|
||||
def parse(source, parser=None):
|
||||
tree = ElementTree()
|
||||
tree.parse(source, parser)
|
||||
return tree
|
||||
|
||||
|
||||
def XML(text, parser=None):
|
||||
if not parser:
|
||||
parser = XMLParser()
|
||||
parser = XMLParser()
|
||||
parser.feed(text)
|
||||
return parser.close()
|
||||
|
||||
|
||||
def XMLID(text, parser=None):
|
||||
tree = XML(text, parser=parser)
|
||||
ids = {}
|
||||
for elem in tree.iter():
|
||||
id = elem.get('id')
|
||||
if id:
|
||||
ids[id] = elem
|
||||
return tree, ids
|
||||
|
||||
|
||||
class CommentProxy:
|
||||
|
||||
def __call__(self, text=None):
|
||||
element = Element(_Comment)
|
||||
element.text = text
|
||||
return element
|
||||
|
||||
def __eq__(self, other):
|
||||
return _Comment == other
|
||||
|
||||
|
||||
class PIProxy:
|
||||
|
||||
def __call__(self, target, text=None):
|
||||
element = Element(_PI)
|
||||
element.text = target
|
||||
if text:
|
||||
element.text = element.text + ' ' + text
|
||||
return element
|
||||
|
||||
def __eq__(self, other):
|
||||
return _PI == other
|
||||
|
||||
|
||||
Comment = CommentProxy()
|
||||
PI = ProcessingInstruction = PIProxy()
|
||||
del CommentProxy, PIProxy
|
||||
|
||||
# Aliases
|
||||
fromstring = XML
|
||||
XMLTreeBuilder = XMLParser
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue