From 1fdd7e40afbad567a92de4ce98bdddaa6be14db5 Mon Sep 17 00:00:00 2001 From: Alex Waygood Date: Wed, 8 Dec 2021 13:02:54 +0000 Subject: [PATCH] Add missing objects to `xml.etree.ElementTree` (#6540) Co-authored-by: Akuli --- stdlib/xml/etree/ElementTree.pyi | 27 ++++++++++++++++++++++++++- tests/stubtest_allowlists/py310.txt | 16 ---------------- tests/stubtest_allowlists/py38.txt | 16 ---------------- tests/stubtest_allowlists/py39.txt | 16 ---------------- 4 files changed, 26 insertions(+), 49 deletions(-) diff --git a/stdlib/xml/etree/ElementTree.pyi b/stdlib/xml/etree/ElementTree.pyi index e63253d8a..6ee578b9a 100644 --- a/stdlib/xml/etree/ElementTree.pyi +++ b/stdlib/xml/etree/ElementTree.pyi @@ -10,6 +10,7 @@ from typing import ( Iterable, Iterator, KeysView, + Mapping, MutableSequence, Sequence, TypeVar, @@ -259,11 +260,29 @@ def fromstringlist(sequence: Sequence[str | bytes], parser: XMLParser | None = . _ElementFactory = Callable[[Any, Dict[Any, Any]], Element] class TreeBuilder: - def __init__(self, element_factory: _ElementFactory | None = ...) -> None: ... + if sys.version_info >= (3, 8): + # comment_factory can take None because passing None to Comment is not an error + def __init__( + self, + element_factory: _ElementFactory | None = ..., + *, + comment_factory: Callable[[str | None], Element] | None = ..., + pi_factory: Callable[[str, str | None], Element] | None = ..., + insert_comments: bool = ..., + insert_pis: bool = ..., + ) -> None: ... + insert_comments: bool + insert_pis: bool + else: + def __init__(self, element_factory: _ElementFactory | None = ...) -> None: ... def close(self) -> Element: ... def data(self, __data: str | bytes) -> None: ... def start(self, __tag: str | bytes, __attrs: dict[str | bytes, str | bytes]) -> Element: ... def end(self, __tag: str | bytes) -> Element: ... + if sys.version_info >= (3, 8): + # These two methods have pos-only parameters in the C implementation + def comment(self, __text: str | None) -> Element: ... + def pi(self, __target: str, __text: str | None = ...) -> Element: ... if sys.version_info >= (3, 8): class C14NWriterTarget: @@ -279,6 +298,12 @@ if sys.version_info >= (3, 8): exclude_attrs: Iterable[str] | None = ..., exclude_tags: Iterable[str] | None = ..., ) -> None: ... + def data(self, data: str) -> None: ... + def start_ns(self, prefix: str, uri: str) -> None: ... + def start(self, tag: str, attrs: Mapping[str, str]) -> None: ... + def end(self, tag: str) -> None: ... + def comment(self, text: str) -> None: ... + def pi(self, target: str, data: str) -> None: ... class XMLParser: parser: Any diff --git a/tests/stubtest_allowlists/py310.txt b/tests/stubtest_allowlists/py310.txt index 91a666c7a..efcfa1d92 100644 --- a/tests/stubtest_allowlists/py310.txt +++ b/tests/stubtest_allowlists/py310.txt @@ -178,22 +178,6 @@ types.CoroutineType.cr_origin typing._SpecialForm.__call__ unicodedata.UCD.is_normalized xml.etree.ElementInclude.LimitedRecursiveIncludeError -xml.etree.ElementTree.C14NWriterTarget.comment -xml.etree.ElementTree.C14NWriterTarget.data -xml.etree.ElementTree.C14NWriterTarget.end -xml.etree.ElementTree.C14NWriterTarget.pi -xml.etree.ElementTree.C14NWriterTarget.start -xml.etree.ElementTree.C14NWriterTarget.start_ns -xml.etree.ElementTree.TreeBuilder.comment -xml.etree.ElementTree.TreeBuilder.pi -xml.etree.cElementTree.C14NWriterTarget.comment -xml.etree.cElementTree.C14NWriterTarget.data -xml.etree.cElementTree.C14NWriterTarget.end -xml.etree.cElementTree.C14NWriterTarget.pi -xml.etree.cElementTree.C14NWriterTarget.start -xml.etree.cElementTree.C14NWriterTarget.start_ns -xml.etree.cElementTree.TreeBuilder.comment -xml.etree.cElementTree.TreeBuilder.pi xml.parsers.expat.XMLParserType.SkippedEntityHandler xml.parsers.expat.XMLParserType.intern xml.sax.handler.LexicalHandler diff --git a/tests/stubtest_allowlists/py38.txt b/tests/stubtest_allowlists/py38.txt index 89e57ab63..c8f8bdb29 100644 --- a/tests/stubtest_allowlists/py38.txt +++ b/tests/stubtest_allowlists/py38.txt @@ -156,21 +156,5 @@ tkinter.dnd.test types.CoroutineType.cr_origin typing._SpecialForm.__call__ unicodedata.UCD.is_normalized -xml.etree.ElementTree.C14NWriterTarget.comment -xml.etree.ElementTree.C14NWriterTarget.data -xml.etree.ElementTree.C14NWriterTarget.end -xml.etree.ElementTree.C14NWriterTarget.pi -xml.etree.ElementTree.C14NWriterTarget.start -xml.etree.ElementTree.C14NWriterTarget.start_ns -xml.etree.ElementTree.TreeBuilder.comment -xml.etree.ElementTree.TreeBuilder.pi -xml.etree.cElementTree.C14NWriterTarget.comment -xml.etree.cElementTree.C14NWriterTarget.data -xml.etree.cElementTree.C14NWriterTarget.end -xml.etree.cElementTree.C14NWriterTarget.pi -xml.etree.cElementTree.C14NWriterTarget.start -xml.etree.cElementTree.C14NWriterTarget.start_ns -xml.etree.cElementTree.TreeBuilder.comment -xml.etree.cElementTree.TreeBuilder.pi xml.parsers.expat.XMLParserType.SkippedEntityHandler xml.parsers.expat.XMLParserType.intern diff --git a/tests/stubtest_allowlists/py39.txt b/tests/stubtest_allowlists/py39.txt index 23ada75a9..43cd241bb 100644 --- a/tests/stubtest_allowlists/py39.txt +++ b/tests/stubtest_allowlists/py39.txt @@ -157,21 +157,5 @@ types.CoroutineType.cr_origin typing._SpecialForm.__call__ unicodedata.UCD.is_normalized xml.etree.ElementInclude.LimitedRecursiveIncludeError -xml.etree.ElementTree.C14NWriterTarget.comment -xml.etree.ElementTree.C14NWriterTarget.data -xml.etree.ElementTree.C14NWriterTarget.end -xml.etree.ElementTree.C14NWriterTarget.pi -xml.etree.ElementTree.C14NWriterTarget.start -xml.etree.ElementTree.C14NWriterTarget.start_ns -xml.etree.ElementTree.TreeBuilder.comment -xml.etree.ElementTree.TreeBuilder.pi -xml.etree.cElementTree.C14NWriterTarget.comment -xml.etree.cElementTree.C14NWriterTarget.data -xml.etree.cElementTree.C14NWriterTarget.end -xml.etree.cElementTree.C14NWriterTarget.pi -xml.etree.cElementTree.C14NWriterTarget.start -xml.etree.cElementTree.C14NWriterTarget.start_ns -xml.etree.cElementTree.TreeBuilder.comment -xml.etree.cElementTree.TreeBuilder.pi xml.parsers.expat.XMLParserType.SkippedEntityHandler xml.parsers.expat.XMLParserType.intern