Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit f4bdf4e

Browse files
committed
Issue #13988: move the python bootstrap code to cElementTree.py, and remove obsolete code for Python 2.4 and 2.5.
1 parent 44fb613 commit f4bdf4e

2 files changed

Lines changed: 152 additions & 232 deletions

File tree

Lib/xml/etree/cElementTree.py

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,153 @@
11
# Wrapper module for _elementtree
22

3+
from xml.etree.ElementTree import (ElementTree, dump, iselement, QName,
4+
fromstringlist,
5+
tostring, tostringlist, VERSION)
6+
# These ones are not in ElementTree.__all__
7+
from xml.etree.ElementTree import ElementPath, register_namespace
8+
9+
# Import the C accelerators:
10+
# Element, SubElement, TreeBuilder, XMLParser, ParseError
311
from _elementtree import *
12+
13+
14+
class ElementTree(ElementTree):
15+
16+
def parse(self, source, parser=None):
17+
close_source = False
18+
if not hasattr(source, 'read'):
19+
source = open(source, 'rb')
20+
close_source = True
21+
try:
22+
if parser is not None:
23+
while True:
24+
data = source.read(65536)
25+
if not data:
26+
break
27+
parser.feed(data)
28+
self._root = parser.close()
29+
else:
30+
parser = XMLParser()
31+
self._root = parser._parse(source)
32+
return self._root
33+
finally:
34+
if close_source:
35+
source.close()
36+
37+
38+
class iterparse:
39+
root = None
40+
41+
def __init__(self, file, events=None):
42+
self._close_file = False
43+
if not hasattr(file, 'read'):
44+
file = open(file, 'rb')
45+
self._close_file = True
46+
self._file = file
47+
self._events = []
48+
self._index = 0
49+
self._error = None
50+
self.root = self._root = None
51+
b = TreeBuilder()
52+
self._parser = XMLParser(b)
53+
self._parser._setevents(self._events, events)
54+
55+
def __next__(self):
56+
while True:
57+
try:
58+
item = self._events[self._index]
59+
self._index += 1
60+
return item
61+
except IndexError:
62+
pass
63+
if self._error:
64+
e = self._error
65+
self._error = None
66+
raise e
67+
if self._parser is None:
68+
self.root = self._root
69+
if self._close_file:
70+
self._file.close()
71+
raise StopIteration
72+
# load event buffer
73+
del self._events[:]
74+
self._index = 0
75+
data = self._file.read(16384)
76+
if data:
77+
try:
78+
self._parser.feed(data)
79+
except SyntaxError as exc:
80+
self._error = exc
81+
else:
82+
self._root = self._parser.close()
83+
self._parser = None
84+
85+
def __iter__(self):
86+
return self
87+
88+
89+
# =============================================================================
90+
#
91+
# Everything below this line can be removed
92+
# after cElementTree is folded behind ElementTree.
93+
#
94+
# =============================================================================
95+
96+
from xml.etree.ElementTree import Comment as _Comment, PI as _PI
97+
98+
99+
def parse(source, parser=None):
100+
tree = ElementTree()
101+
tree.parse(source, parser)
102+
return tree
103+
104+
105+
def XML(text, parser=None):
106+
if not parser:
107+
parser = XMLParser()
108+
parser = XMLParser()
109+
parser.feed(text)
110+
return parser.close()
111+
112+
113+
def XMLID(text, parser=None):
114+
tree = XML(text, parser=parser)
115+
ids = {}
116+
for elem in tree.iter():
117+
id = elem.get('id')
118+
if id:
119+
ids[id] = elem
120+
return tree, ids
121+
122+
123+
class CommentProxy:
124+
125+
def __call__(self, text=None):
126+
element = Element(_Comment)
127+
element.text = text
128+
return element
129+
130+
def __eq__(self, other):
131+
return _Comment == other
132+
133+
134+
class PIProxy:
135+
136+
def __call__(self, target, text=None):
137+
element = Element(_PI)
138+
element.text = target
139+
if text:
140+
element.text = element.text + ' ' + text
141+
return element
142+
143+
def __eq__(self, other):
144+
return _PI == other
145+
146+
147+
Comment = CommentProxy()
148+
PI = ProcessingInstruction = PIProxy()
149+
del CommentProxy, PIProxy
150+
151+
# Aliases
152+
fromstring = XML
153+
XMLTreeBuilder = XMLParser

0 commit comments

Comments
 (0)