Skip to content

Commit ec4ec33

Browse files
xml: improve bytes types (#9110)
Co-authored-by: Shantanu <[email protected]>
1 parent 294b03f commit ec4ec33

File tree

5 files changed

+27
-24
lines changed

5 files changed

+27
-24
lines changed

stdlib/xml/dom/expatbuilder.pyi

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from _typeshed import Incomplete
1+
from _typeshed import Incomplete, ReadableBuffer, SupportsRead
22
from typing import Any, NoReturn
33
from xml.dom.minidom import Document, DOMImplementation, Node, TypeInfo
44
from xml.dom.xmlbuilder import DOMBuilderFilter, Options
@@ -30,8 +30,8 @@ class ExpatBuilder:
3030
def getParser(self): ...
3131
def reset(self) -> None: ...
3232
def install(self, parser) -> None: ...
33-
def parseFile(self, file) -> Document: ...
34-
def parseString(self, string: str) -> Document: ...
33+
def parseFile(self, file: SupportsRead[ReadableBuffer | str]) -> Document: ...
34+
def parseString(self, string: str | ReadableBuffer) -> Document: ...
3535
def start_doctype_decl_handler(self, doctypeName, systemId, publicId, has_internal_subset) -> None: ...
3636
def end_doctype_decl_handler(self) -> None: ...
3737
def pi_handler(self, target, data) -> None: ...
@@ -87,14 +87,14 @@ class ParseEscape(Exception): ...
8787
class InternalSubsetExtractor(ExpatBuilder):
8888
subset: Any | None
8989
def getSubset(self) -> Any | None: ...
90-
def parseFile(self, file) -> None: ... # type: ignore[override]
91-
def parseString(self, string: str) -> None: ... # type: ignore[override]
90+
def parseFile(self, file: SupportsRead[ReadableBuffer | str]) -> None: ... # type: ignore[override]
91+
def parseString(self, string: str | ReadableBuffer) -> None: ... # type: ignore[override]
9292
def start_doctype_decl_handler(self, name, publicId, systemId, has_internal_subset) -> None: ... # type: ignore[override]
9393
def end_doctype_decl_handler(self) -> NoReturn: ...
9494
def start_element_handler(self, name, attrs) -> NoReturn: ...
9595

96-
def parse(file, namespaces: bool = ...): ...
97-
def parseString(string: str, namespaces: bool = ...): ...
96+
def parse(file: str | SupportsRead[ReadableBuffer | str], namespaces: bool = ...): ...
97+
def parseString(string: str | ReadableBuffer, namespaces: bool = ...): ...
9898
def parseFragment(file, context, namespaces: bool = ...): ...
9999
def parseFragmentString(string: str, context, namespaces: bool = ...): ...
100100
def makeBuilder(options: Options) -> ExpatBuilderNS | ExpatBuilder: ...

stdlib/xml/dom/minidom.pyi

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import sys
22
import xml.dom
3-
from _typeshed import Incomplete, Self, SupportsRead, SupportsWrite
3+
from _typeshed import Incomplete, ReadableBuffer, Self, SupportsRead, SupportsWrite
44
from typing_extensions import Literal
55
from xml.dom.xmlbuilder import DocumentLS, DOMImplementationLS
66
from xml.sax.xmlreader import XMLReader
77

8-
def parse(file: str | SupportsRead[bytes] | SupportsRead[str], parser: XMLReader | None = ..., bufsize: int | None = ...): ...
9-
def parseString(string: str | bytes, parser: XMLReader | None = ...): ...
8+
def parse(file: str | SupportsRead[ReadableBuffer | str], parser: XMLReader | None = ..., bufsize: int | None = ...): ...
9+
def parseString(string: str | ReadableBuffer, parser: XMLReader | None = ...): ...
1010
def getDOMImplementation(features=...) -> DOMImplementation | None: ...
1111

1212
class Node(xml.dom.Node):

stdlib/xml/etree/ElementInclude.pyi

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import sys
2+
from _typeshed import StrOrBytesPath
23
from collections.abc import Callable
34
from xml.etree.ElementTree import Element
45

@@ -11,7 +12,7 @@ if sys.version_info >= (3, 9):
1112

1213
class FatalIncludeError(SyntaxError): ...
1314

14-
def default_loader(href: str | bytes | int, parse: str, encoding: str | None = ...) -> str | Element: ...
15+
def default_loader(href: StrOrBytesPath | int, parse: str, encoding: str | None = ...) -> str | Element: ...
1516

1617
# TODO: loader is of type default_loader ie it takes a callable that has the
1718
# same signature as default_loader. But default_loader has a keyword argument

stdlib/xml/etree/ElementTree.pyi

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import sys
22
from _collections_abc import dict_keys
3-
from _typeshed import FileDescriptor, StrOrBytesPath, SupportsRead, SupportsWrite
3+
from _typeshed import FileDescriptor, ReadableBuffer, StrOrBytesPath, SupportsRead, SupportsWrite
44
from collections.abc import Callable, Generator, ItemsView, Iterable, Iterator, Mapping, Sequence
55
from typing import Any, TypeVar, overload
66
from typing_extensions import Literal, SupportsIndex, TypeAlias, TypeGuard
@@ -54,7 +54,7 @@ def iselement(element: object) -> TypeGuard[Element]: ...
5454
if sys.version_info >= (3, 8):
5555
@overload
5656
def canonicalize(
57-
xml_data: str | bytes | None = ...,
57+
xml_data: str | ReadableBuffer | None = ...,
5858
*,
5959
out: None = ...,
6060
from_file: _FileRead | None = ...,
@@ -68,7 +68,7 @@ if sys.version_info >= (3, 8):
6868
) -> str: ...
6969
@overload
7070
def canonicalize(
71-
xml_data: str | bytes | None = ...,
71+
xml_data: str | ReadableBuffer | None = ...,
7272
*,
7373
out: SupportsWrite[str],
7474
from_file: _FileRead | None = ...,
@@ -270,19 +270,19 @@ def iterparse(
270270

271271
class XMLPullParser:
272272
def __init__(self, events: Sequence[str] | None = ..., *, _parser: XMLParser | None = ...) -> None: ...
273-
def feed(self, data: str | bytes) -> None: ...
273+
def feed(self, data: str | ReadableBuffer) -> None: ...
274274
def close(self) -> None: ...
275275
# Second element in the tuple could be `Element`, `tuple[str, str]` or `None`.
276276
# Use `Any` to avoid false-positive errors.
277277
def read_events(self) -> Iterator[tuple[str, Any]]: ...
278278

279-
def XML(text: str | bytes, parser: XMLParser | None = ...) -> Element: ...
280-
def XMLID(text: str | bytes, parser: XMLParser | None = ...) -> tuple[Element, dict[str, Element]]: ...
279+
def XML(text: str | ReadableBuffer, parser: XMLParser | None = ...) -> Element: ...
280+
def XMLID(text: str | ReadableBuffer, parser: XMLParser | None = ...) -> tuple[Element, dict[str, Element]]: ...
281281

282282
# This is aliased to XML in the source.
283283
fromstring = XML
284284

285-
def fromstringlist(sequence: Sequence[str | bytes], parser: XMLParser | None = ...) -> Element: ...
285+
def fromstringlist(sequence: Sequence[str | ReadableBuffer], parser: XMLParser | None = ...) -> Element: ...
286286

287287
# This type is both not precise enough and too precise. The TreeBuilder
288288
# requires the elementfactory to accept tag and attrs in its args and produce
@@ -313,9 +313,11 @@ class TreeBuilder:
313313
def __init__(self, element_factory: _ElementFactory | None = ...) -> None: ...
314314

315315
def close(self) -> Element: ...
316-
def data(self, __data: str | bytes) -> None: ...
317-
def start(self, __tag: str | bytes, __attrs: dict[str | bytes, str | bytes]) -> Element: ...
318-
def end(self, __tag: str | bytes) -> Element: ...
316+
def data(self, __data: str) -> None: ...
317+
# tag and attrs are passed to the element_factory, so they could be anything
318+
# depending on what the particular factory supports.
319+
def start(self, __tag: Any, __attrs: dict[Any, Any]) -> Element: ...
320+
def end(self, __tag: str) -> Element: ...
319321
if sys.version_info >= (3, 8):
320322
# These two methods have pos-only parameters in the C implementation
321323
def comment(self, __text: str | None) -> Element: ...
@@ -355,4 +357,4 @@ class XMLParser:
355357
def doctype(self, __name: str, __pubid: str, __system: str) -> None: ...
356358

357359
def close(self) -> Any: ...
358-
def feed(self, __data: str | bytes) -> None: ...
360+
def feed(self, __data: str | ReadableBuffer) -> None: ...

stdlib/xml/sax/__init__.pyi

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import sys
2-
from _typeshed import SupportsRead, _T_co
2+
from _typeshed import ReadableBuffer, SupportsRead, _T_co
33
from collections.abc import Iterable
44
from typing import Any, NoReturn, Protocol
55
from xml.sax.handler import ContentHandler as ContentHandler, ErrorHandler as ErrorHandler
@@ -36,5 +36,5 @@ else:
3636
def parse(
3737
source: str | _SupportsReadClose[bytes] | _SupportsReadClose[str], handler: ContentHandler, errorHandler: ErrorHandler = ...
3838
) -> None: ...
39-
def parseString(string: bytes | str, handler: ContentHandler, errorHandler: ErrorHandler | None = ...) -> None: ...
39+
def parseString(string: ReadableBuffer | str, handler: ContentHandler, errorHandler: ErrorHandler | None = ...) -> None: ...
4040
def _create_parser(parser_name: str) -> XMLReader: ...

0 commit comments

Comments
 (0)