summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Heimes <christian@python.org>2021-03-04 11:34:33 +0100
committerChristian Heimes <christian@python.org>2021-03-04 11:41:18 +0100
commit1ac00c6dcb7696b960611ebdd80964907d7d07ae (patch)
treefa4782731e9f1d6fa20349960983dc1a47009a86
parent62634db29bc2ed05a8504cf022ba101f2e720f2f (diff)
downloaddefusedxml-git-1ac00c6dcb7696b960611ebdd80964907d7d07ae.tar.gz
Add ElementTree.fromstringlist()
Include ``fromstringlist()`` method introduced in Python 3.2. Closes: #47 Co-authored-by: Antoine <antoine.sb@orange.fr> Signed-off-by: Christian Heimes <christian@python.org>
-rw-r--r--CHANGES.txt1
-rw-r--r--README.md1
-rw-r--r--defusedxml/ElementTree.py13
-rw-r--r--defusedxml/cElementTree.py2
-rw-r--r--tests.py10
5 files changed, 27 insertions, 0 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
index 9f54433..2de9129 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -5,6 +5,7 @@ defusedxml 0.8.0.dev1
---------------------
- Drop support for Python 2.7, 3.4, and 3.5.
+- Add ``defusedxml.ElementTree.fromstringlist()``
defusedxml 0.7.0
diff --git a/README.md b/README.md
index 3f36f3f..b5fb56e 100644
--- a/README.md
+++ b/README.md
@@ -719,6 +719,7 @@ See <https://www.python.org/psf/license> for licensing details.
## defusedxml 0.8.0.dev1
- Drop support for Python 2.7, 3.4, and 3.5.
+ - Add `defusedxml.ElementTree.fromstringlist()`
## defusedxml 0.7.0
diff --git a/defusedxml/ElementTree.py b/defusedxml/ElementTree.py
index f2f8d61..7209661 100644
--- a/defusedxml/ElementTree.py
+++ b/defusedxml/ElementTree.py
@@ -160,6 +160,18 @@ def fromstring(text, forbid_dtd=False, forbid_entities=True, forbid_external=Tru
XML = fromstring
+def fromstringlist(sequence, forbid_dtd=False, forbid_entities=True, forbid_external=True):
+ parser = DefusedXMLParser(
+ target=_TreeBuilder(),
+ forbid_dtd=forbid_dtd,
+ forbid_entities=forbid_entities,
+ forbid_external=forbid_external,
+ )
+ for text in sequence:
+ parser.feed(text)
+ return parser.close()
+
+
__all__ = [
"ParseError",
"XML",
@@ -167,6 +179,7 @@ __all__ = [
"XMLParser",
"XMLTreeBuilder",
"fromstring",
+ "fromstringlist",
"iterparse",
"parse",
"tostring",
diff --git a/defusedxml/cElementTree.py b/defusedxml/cElementTree.py
index 565ab66..74892cd 100644
--- a/defusedxml/cElementTree.py
+++ b/defusedxml/cElementTree.py
@@ -14,6 +14,7 @@ from .ElementTree import (
XMLParser,
XMLTreeBuilder,
fromstring,
+ fromstringlist,
iterparse,
parse,
tostring,
@@ -35,6 +36,7 @@ __all__ = [
"XMLParser",
"XMLTreeBuilder",
"fromstring",
+ "fromstringlist",
"iterparse",
"parse",
"tostring",
diff --git a/tests.py b/tests.py
index f9dbfff..ccdf49b 100644
--- a/tests.py
+++ b/tests.py
@@ -188,6 +188,10 @@ class TestDefusedElementTree(BaseTests):
tree = self.module.fromstring(xmlstring, **kwargs)
return self.module.tostring(tree)
+ def parseStringList(self, sequence, **kwargs):
+ tree = self.module.fromstringlist(sequence, **kwargs)
+ return self.module.tostring(tree)
+
def iterparse(self, source, **kwargs):
return list(self.module.iterparse(source, **kwargs))
@@ -203,6 +207,12 @@ class TestDefusedElementTree(BaseTests):
assert self.module.XMLParser is parser
assert self.module.XMLParse is parser
+ def test_fromstringlist(self):
+ seq = ["<root>", '<tag id="one" />', '<tag id="two" />', "</root>"]
+ tree = self.module.fromstringlist(seq)
+ result = self.module.tostring(tree)
+ self.assertEqual(result, "".join(seq).encode("utf-8"))
+
def test_import_order(self):
from xml.etree import ElementTree as second_elementtree