import sys from _typeshed import FileDescriptor, StrOrBytesPath, SupportsWrite from typing import ( IO, Any, Callable, Dict, Generator, ItemsView, Iterable, Iterator, KeysView, MutableSequence, Sequence, TypeVar, Union, overload, ) from typing_extensions import Literal _T = TypeVar("_T") _File = Union[StrOrBytesPath, FileDescriptor, IO[Any]] VERSION: str class ParseError(SyntaxError): code: int position: tuple[int, int] def iselement(element: object) -> bool: ... if sys.version_info >= (3, 8): @overload def canonicalize( xml_data: str | bytes | None = ..., *, out: None = ..., from_file: _File | None = ..., with_comments: bool = ..., strip_text: bool = ..., rewrite_prefixes: bool = ..., qname_aware_tags: Iterable[str] | None = ..., qname_aware_attrs: Iterable[str] | None = ..., exclude_attrs: Iterable[str] | None = ..., exclude_tags: Iterable[str] | None = ..., ) -> str: ... @overload def canonicalize( xml_data: str | bytes | None = ..., *, out: SupportsWrite[str], from_file: _File | None = ..., with_comments: bool = ..., strip_text: bool = ..., rewrite_prefixes: bool = ..., qname_aware_tags: Iterable[str] | None = ..., qname_aware_attrs: Iterable[str] | None = ..., exclude_attrs: Iterable[str] | None = ..., exclude_tags: Iterable[str] | None = ..., ) -> None: ... class Element(MutableSequence[Element]): tag: str attrib: dict[str, str] text: str | None tail: str | None def __init__(self, tag: str | Callable[..., Element], attrib: dict[str, str] = ..., **extra: str) -> None: ... def append(self, __subelement: Element) -> None: ... def clear(self) -> None: ... def extend(self, __elements: Iterable[Element]) -> None: ... def find(self, path: str, namespaces: dict[str, str] | None = ...) -> Element | None: ... def findall(self, path: str, namespaces: dict[str, str] | None = ...) -> list[Element]: ... @overload def findtext(self, path: str, default: None = ..., namespaces: dict[str, str] | None = ...) -> str | None: ... @overload def findtext(self, path: str, default: _T, namespaces: dict[str, str] | None = ...) -> _T | str: ... @overload def get(self, key: str, default: None = ...) -> str | None: ... @overload def get(self, key: str, default: _T) -> str | _T: ... def insert(self, __index: int, __subelement: Element) -> None: ... def items(self) -> ItemsView[str, str]: ... def iter(self, tag: str | None = ...) -> Generator[Element, None, None]: ... def iterfind(self, path: str, namespaces: dict[str, str] | None = ...) -> Generator[Element, None, None]: ... def itertext(self) -> Generator[str, None, None]: ... def keys(self) -> KeysView[str]: ... def makeelement(self, __tag: str, __attrib: dict[str, str]) -> Element: ... def remove(self, __subelement: Element) -> None: ... def set(self, __key: str, __value: str) -> None: ... def __delitem__(self, i: int | slice) -> None: ... @overload def __getitem__(self, i: int) -> Element: ... @overload def __getitem__(self, s: slice) -> MutableSequence[Element]: ... def __len__(self) -> int: ... @overload def __setitem__(self, i: int, o: Element) -> None: ... @overload def __setitem__(self, s: slice, o: Iterable[Element]) -> None: ... if sys.version_info < (3, 9): def getchildren(self) -> list[Element]: ... def getiterator(self, tag: str | None = ...) -> list[Element]: ... def SubElement(parent: Element, tag: str, attrib: dict[str, str] = ..., **extra: str) -> Element: ... def Comment(text: str | None = ...) -> Element: ... def ProcessingInstruction(target: str, text: str | None = ...) -> Element: ... PI: Callable[..., Element] class QName: text: str def __init__(self, text_or_uri: str, tag: str | None = ...) -> None: ... class ElementTree: def __init__(self, element: Element | None = ..., file: _File | None = ...) -> None: ... def getroot(self) -> Element: ... def parse(self, source: _File, parser: XMLParser | None = ...) -> Element: ... def iter(self, tag: str | None = ...) -> Generator[Element, None, None]: ... if sys.version_info < (3, 9): def getiterator(self, tag: str | None = ...) -> list[Element]: ... def find(self, path: str, namespaces: dict[str, str] | None = ...) -> Element | None: ... @overload def findtext(self, path: str, default: None = ..., namespaces: dict[str, str] | None = ...) -> str | None: ... @overload def findtext(self, path: str, default: _T, namespaces: dict[str, str] | None = ...) -> _T | str: ... def findall(self, path: str, namespaces: dict[str, str] | None = ...) -> list[Element]: ... def iterfind(self, path: str, namespaces: dict[str, str] | None = ...) -> Generator[Element, None, None]: ... def write( self, file_or_filename: _File, encoding: str | None = ..., xml_declaration: bool | None = ..., default_namespace: str | None = ..., method: str | None = ..., *, short_empty_elements: bool = ..., ) -> None: ... def write_c14n(self, file: _File) -> None: ... def register_namespace(prefix: str, uri: str) -> None: ... if sys.version_info >= (3, 8): @overload def tostring( element: Element, encoding: None = ..., method: str | None = ..., *, xml_declaration: bool | None = ..., default_namespace: str | None = ..., short_empty_elements: bool = ..., ) -> bytes: ... @overload def tostring( element: Element, encoding: Literal["unicode"], method: str | None = ..., *, xml_declaration: bool | None = ..., default_namespace: str | None = ..., short_empty_elements: bool = ..., ) -> str: ... @overload def tostring( element: Element, encoding: str, method: str | None = ..., *, xml_declaration: bool | None = ..., default_namespace: str | None = ..., short_empty_elements: bool = ..., ) -> Any: ... @overload def tostringlist( element: Element, encoding: None = ..., method: str | None = ..., *, xml_declaration: bool | None = ..., default_namespace: str | None = ..., short_empty_elements: bool = ..., ) -> list[bytes]: ... @overload def tostringlist( element: Element, encoding: Literal["unicode"], method: str | None = ..., *, xml_declaration: bool | None = ..., default_namespace: str | None = ..., short_empty_elements: bool = ..., ) -> list[str]: ... @overload def tostringlist( element: Element, encoding: str, method: str | None = ..., *, xml_declaration: bool | None = ..., default_namespace: str | None = ..., short_empty_elements: bool = ..., ) -> list[Any]: ... else: @overload def tostring( element: Element, encoding: None = ..., method: str | None = ..., *, short_empty_elements: bool = ... ) -> bytes: ... @overload def tostring( element: Element, encoding: Literal["unicode"], method: str | None = ..., *, short_empty_elements: bool = ... ) -> str: ... @overload def tostring(element: Element, encoding: str, method: str | None = ..., *, short_empty_elements: bool = ...) -> Any: ... @overload def tostringlist( element: Element, encoding: None = ..., method: str | None = ..., *, short_empty_elements: bool = ... ) -> list[bytes]: ... @overload def tostringlist( element: Element, encoding: Literal["unicode"], method: str | None = ..., *, short_empty_elements: bool = ... ) -> list[str]: ... @overload def tostringlist( element: Element, encoding: str, method: str | None = ..., *, short_empty_elements: bool = ... ) -> list[Any]: ... def dump(elem: Element) -> None: ... if sys.version_info >= (3, 9): def indent(tree: Element | ElementTree, space: str = ..., level: int = ...) -> None: ... def parse(source: _File, parser: XMLParser | None = ...) -> ElementTree: ... def iterparse(source: _File, events: Sequence[str] | None = ..., parser: XMLParser | None = ...) -> Iterator[tuple[str, Any]]: ... class XMLPullParser: def __init__(self, events: Sequence[str] | None = ..., *, _parser: XMLParser | None = ...) -> None: ... def feed(self, data: bytes) -> None: ... def close(self) -> None: ... def read_events(self) -> Iterator[tuple[str, Element]]: ... def XML(text: str | bytes, parser: XMLParser | None = ...) -> Element: ... def XMLID(text: str | bytes, parser: XMLParser | None = ...) -> tuple[Element, dict[str, Element]]: ... # This is aliased to XML in the source. fromstring = XML def fromstringlist(sequence: Sequence[str | bytes], parser: XMLParser | None = ...) -> Element: ... # This type is both not precise enough and too precise. The TreeBuilder # requires the elementfactory to accept tag and attrs in its args and produce # some kind of object that has .text and .tail properties. # I've chosen to constrain the ElementFactory to always produce an Element # because that is how almost everyone will use it. # Unfortunately, the type of the factory arguments is dependent on how # TreeBuilder is called by client code (they could pass strs, bytes or whatever); # but we don't want to use a too-broad type, or it would be too hard to write # elementfactories. _ElementFactory = Callable[[Any, Dict[Any, Any]], Element] class TreeBuilder: 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): class C14NWriterTarget: def __init__( self, write: Callable[[str], Any], *, with_comments: bool = ..., strip_text: bool = ..., rewrite_prefixes: bool = ..., qname_aware_tags: Iterable[str] | None = ..., qname_aware_attrs: Iterable[str] | None = ..., exclude_attrs: Iterable[str] | None = ..., exclude_tags: Iterable[str] | None = ..., ) -> None: ... class XMLParser: parser: Any target: Any # TODO-what is entity used for??? entity: Any version: str if sys.version_info >= (3, 8): def __init__(self, *, target: Any = ..., encoding: str | None = ...) -> None: ... else: def __init__(self, html: int = ..., target: Any = ..., encoding: str | None = ...) -> None: ... def doctype(self, __name: str, __pubid: str, __system: str) -> None: ... def close(self) -> Any: ... def feed(self, __data: str | bytes) -> None: ...