diff options
author | Christian Heimes <christian@python.org> | 2021-03-04 11:34:33 +0100 |
---|---|---|
committer | Christian Heimes <christian@python.org> | 2021-03-04 11:41:18 +0100 |
commit | 1ac00c6dcb7696b960611ebdd80964907d7d07ae (patch) | |
tree | fa4782731e9f1d6fa20349960983dc1a47009a86 | |
parent | 62634db29bc2ed05a8504cf022ba101f2e720f2f (diff) | |
download | defusedxml-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.txt | 1 | ||||
-rw-r--r-- | README.md | 1 | ||||
-rw-r--r-- | defusedxml/ElementTree.py | 13 | ||||
-rw-r--r-- | defusedxml/cElementTree.py | 2 | ||||
-rw-r--r-- | tests.py | 10 |
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 @@ -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", @@ -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 |