Skip to content

Commit a345039

Browse files
authored
[defusedxml] Add missing stubs (#14265)
1 parent 2dabec0 commit a345039

File tree

11 files changed

+218
-89
lines changed

11 files changed

+218
-89
lines changed

stubs/defusedxml/METADATA.toml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
version = "0.7.*"
22
upstream_repository = "https://github.com/tiran/defusedxml"
3-
partial_stub = true
43

54
[tool.stubtest]
6-
ignore_missing_stub = true
75
stubtest_requirements = ["lxml"]

stubs/defusedxml/defusedxml/ElementTree.pyi

Lines changed: 44 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,75 @@
1-
from collections.abc import Iterator, Sequence
2-
from typing import Any
3-
from xml.etree.ElementTree import Element, ElementTree, ParseError as ParseError, XMLParser as _XMLParser, tostring as tostring
1+
from _typeshed import ReadableBuffer
2+
from collections.abc import Sequence
3+
from typing import Final
4+
from xml.etree.ElementTree import (
5+
Element,
6+
ElementTree,
7+
ParseError as ParseError,
8+
XMLParser as _XMLParser,
9+
_FileRead,
10+
_IterParseIterator,
11+
_Target,
12+
tostring as tostring,
13+
)
14+
15+
__origin__: Final = "xml.etree.ElementTree"
416

517
class DefusedXMLParser(_XMLParser):
618
forbid_dtd: bool
719
forbid_entities: bool
820
forbid_external: bool
921
def __init__(
1022
self,
11-
html=...,
12-
target=None,
23+
html: object = ..., # argument is deprecated, if bool(html) is True you will get TypeError
24+
target: _Target | None = None,
1325
encoding: str | None = None,
1426
forbid_dtd: bool = False,
1527
forbid_entities: bool = True,
1628
forbid_external: bool = True,
1729
) -> None: ...
18-
def defused_start_doctype_decl(self, name, sysid, pubid, has_internal_subset) -> None: ...
19-
def defused_entity_decl(self, name, is_parameter_entity, value, base, sysid, pubid, notation_name) -> None: ...
20-
def defused_unparsed_entity_decl(self, name, base, sysid, pubid, notation_name) -> None: ...
21-
def defused_external_entity_ref_handler(self, context, base, sysid, pubid) -> None: ...
30+
def defused_start_doctype_decl(self, name: str, sysid: str | None, pubid: str | None, has_internal_subset: bool) -> None: ...
31+
def defused_entity_decl(
32+
self,
33+
name: str,
34+
is_parameter_entity: bool,
35+
value: str | None,
36+
base: str | None,
37+
sysid: str,
38+
pubid: str | None,
39+
notation_name: str | None,
40+
) -> None: ...
41+
def defused_unparsed_entity_decl(
42+
self, name: str, base: str | None, sysid: str, pubid: str | None, notation_name: str
43+
) -> None: ...
44+
def defused_external_entity_ref_handler(
45+
self, context: str, base: str | None, sysid: str | None, pubid: str | None
46+
) -> None: ...
2247

2348
XMLTreeBuilder = DefusedXMLParser
2449
XMLParse = DefusedXMLParser
2550
XMLParser = DefusedXMLParser
2651

2752
# wrapper to xml.etree.ElementTree.parse
2853
def parse(
29-
source, parser: XMLParser | None = None, forbid_dtd: bool = False, forbid_entities: bool = True, forbid_external: bool = True
54+
source: _FileRead,
55+
parser: XMLParser | None = None,
56+
forbid_dtd: bool = False,
57+
forbid_entities: bool = True,
58+
forbid_external: bool = True,
3059
) -> ElementTree: ...
3160

3261
# wrapper to xml.etree.ElementTree.iterparse
3362
def iterparse(
34-
source,
63+
source: _FileRead,
3564
events: Sequence[str] | None = None,
3665
parser: XMLParser | None = None,
3766
forbid_dtd: bool = False,
3867
forbid_entities: bool = True,
3968
forbid_external: bool = True,
40-
) -> Iterator[tuple[str, Any]]: ...
41-
def fromstring(text, forbid_dtd: bool = False, forbid_entities: bool = True, forbid_external: bool = True) -> Element: ...
69+
) -> _IterParseIterator: ...
70+
def fromstring(
71+
text: str | ReadableBuffer, forbid_dtd: bool = False, forbid_entities: bool = True, forbid_external: bool = True
72+
) -> Element: ...
4273

4374
XML = fromstring
4475

stubs/defusedxml/defusedxml/cElementTree.pyi

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from typing import Final
2+
13
from .ElementTree import (
24
XML as XML,
35
ParseError as ParseError,
@@ -10,4 +12,5 @@ from .ElementTree import (
1012
tostring as tostring,
1113
)
1214

15+
__origin__: Final = "xml.etree.cElementTree"
1316
__all__ = ["ParseError", "XML", "XMLParse", "XMLParser", "XMLTreeBuilder", "fromstring", "iterparse", "parse", "tostring"]
Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,31 @@
1-
from _typeshed import Incomplete
1+
from typing import Final
22

3-
PY3: bool
3+
PY3: Final[bool]
44

55
class DefusedXmlException(ValueError): ...
66

77
class DTDForbidden(DefusedXmlException):
8-
name: Incomplete
9-
sysid: Incomplete
10-
pubid: Incomplete
11-
def __init__(self, name, sysid, pubid) -> None: ...
8+
name: str
9+
sysid: str | None
10+
pubid: str | None
11+
def __init__(self, name: str, sysid: str | None, pubid: str | None) -> None: ...
1212

1313
class EntitiesForbidden(DefusedXmlException):
14-
name: Incomplete
15-
value: Incomplete
16-
base: Incomplete
17-
sysid: Incomplete
18-
pubid: Incomplete
19-
notation_name: Incomplete
20-
def __init__(self, name, value, base, sysid, pubid, notation_name) -> None: ...
14+
name: str
15+
value: str | None
16+
base: str | None
17+
sysid: str | None
18+
pubid: str | None
19+
notation_name: str | None
20+
def __init__(
21+
self, name: str, value: str | None, base: str | None, sysid: str | None, pubid: str | None, notation_name: str | None
22+
) -> None: ...
2123

2224
class ExternalReferenceForbidden(DefusedXmlException):
23-
context: Incomplete
24-
base: Incomplete
25-
sysid: Incomplete
26-
pubid: Incomplete
27-
def __init__(self, context, base, sysid, pubid) -> None: ...
25+
context: str
26+
base: str | None
27+
sysid: str | None
28+
pubid: str | None
29+
def __init__(self, context: str, base: str | None, sysid: str | None, pubid: str | None) -> None: ...
2830

2931
class NotSupportedError(DefusedXmlException): ...

stubs/defusedxml/defusedxml/expatbuilder.pyi

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
from _typeshed import SupportsRead
2+
from typing import Final
23
from xml.dom.expatbuilder import ExpatBuilder as _ExpatBuilder, Namespaces as _Namespaces
34
from xml.dom.minidom import Document
45
from xml.dom.xmlbuilder import Options
6+
from xml.parsers.expat import XMLParserType
57

6-
__origin__: str
8+
__origin__: Final = "xml.dom.expatbuilder"
79

810
class DefusedExpatBuilder(_ExpatBuilder):
911
forbid_dtd: bool
@@ -12,14 +14,27 @@ class DefusedExpatBuilder(_ExpatBuilder):
1214
def __init__(
1315
self, options: Options | None = None, forbid_dtd: bool = False, forbid_entities: bool = True, forbid_external: bool = True
1416
) -> None: ...
15-
def defused_start_doctype_decl(self, name, sysid, pubid, has_internal_subset) -> None: ...
16-
def defused_entity_decl(self, name, is_parameter_entity, value, base, sysid, pubid, notation_name) -> None: ...
17-
def defused_unparsed_entity_decl(self, name, base, sysid, pubid, notation_name) -> None: ...
18-
def defused_external_entity_ref_handler(self, context, base, sysid, pubid) -> None: ...
19-
def install(self, parser) -> None: ...
17+
def defused_start_doctype_decl(self, name: str, sysid: str | None, pubid: str | None, has_internal_subset: bool) -> None: ...
18+
def defused_entity_decl(
19+
self,
20+
name: str,
21+
is_parameter_entity: bool,
22+
value: str | None,
23+
base: str | None,
24+
sysid: str,
25+
pubid: str | None,
26+
notation_name: str | None,
27+
) -> None: ...
28+
def defused_unparsed_entity_decl(
29+
self, name: str, base: str | None, sysid: str, pubid: str | None, notation_name: str
30+
) -> None: ...
31+
def defused_external_entity_ref_handler(
32+
self, context: str, base: str | None, sysid: str | None, pubid: str | None
33+
) -> None: ...
34+
def install(self, parser: XMLParserType) -> None: ...
2035

2136
class DefusedExpatBuilderNS(_Namespaces, DefusedExpatBuilder):
22-
def install(self, parser) -> None: ...
37+
def install(self, parser: XMLParserType) -> None: ...
2338
def reset(self) -> None: ...
2439

2540
def parse(
Lines changed: 40 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,43 @@
1-
from _typeshed import Incomplete
1+
from typing import Final
2+
from xml.sax.expatreader import ExpatParser as _ExpatParser, _BoolType
23

3-
# Cannot type most things here as DefusedExpatParser is based off of
4-
# xml.sax.expatreader, which is an undocumented module and lacks types at the moment.
4+
__origin__: Final = "xml.sax.expatreader"
55

6-
__origin__: str
6+
class DefusedExpatParser(_ExpatParser):
7+
forbid_dtd: bool
8+
forbid_entities: bool
9+
forbid_external: bool
10+
def __init__(
11+
self,
12+
namespaceHandling: _BoolType = 0,
13+
bufsize: int = 65516,
14+
forbid_dtd: bool = False,
15+
forbid_entities: bool = True,
16+
forbid_external: bool = True,
17+
) -> None: ...
18+
def defused_start_doctype_decl(self, name: str, sysid: str | None, pubid: str | None, has_internal_subset: bool) -> None: ...
19+
def defused_entity_decl(
20+
self,
21+
name: str,
22+
is_parameter_entity: bool,
23+
value: str | None,
24+
base: str | None,
25+
sysid: str,
26+
pubid: str | None,
27+
notation_name: str | None,
28+
) -> None: ...
29+
def defused_unparsed_entity_decl(
30+
self, name: str, base: str | None, sysid: str, pubid: str | None, notation_name: str
31+
) -> None: ...
32+
def defused_external_entity_ref_handler(
33+
self, context: str, base: str | None, sysid: str | None, pubid: str | None
34+
) -> None: ...
35+
def reset(self) -> None: ...
736

8-
DefusedExpatParser = Incomplete
9-
10-
def create_parser(*args, **kwargs): ...
37+
def create_parser(
38+
namespaceHandling: _BoolType = 0,
39+
bufsize: int = 65516,
40+
forbid_dtd: bool = False,
41+
forbid_entities: bool = True,
42+
forbid_external: bool = True,
43+
) -> DefusedExpatParser: ...

stubs/defusedxml/defusedxml/lxml.pyi

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,27 @@
11
import threading
22
from _typeshed import Incomplete
3-
4-
# Not bothering with types here as lxml support is supposed to be dropped in a future version
5-
# of defusedxml
6-
7-
LXML3: Incomplete
8-
__origin__: str
9-
tostring: Incomplete
3+
from typing import Final, Literal
4+
5+
# Not bothering with types here as lxml support is supposed to be dropped in a future version of defusedxml
6+
7+
LXML3: bool
8+
__origin__: Final = "lxml.etree"
9+
10+
def tostring(
11+
element_or_tree,
12+
*,
13+
encoding: str | None = None,
14+
method: Literal["xml", "html", "text", "c14n", "c14n2"] = "xml",
15+
xml_declaration: bool | None = None,
16+
pretty_print: bool = False,
17+
with_tail: bool = True,
18+
standalone: bool | None = None,
19+
doctype=None,
20+
exclusive: bool = False,
21+
inclusive_ns_prefixes=None,
22+
with_comments: bool = True,
23+
strip_text: bool = False,
24+
): ...
1025

1126
# Should be imported from lxml.etree.ElementBase, but lxml lacks types
1227
class _ElementBase: ...
@@ -28,9 +43,8 @@ class GlobalParserTLS(threading.local):
2843
def setDefaultParser(self, parser) -> None: ...
2944
def getDefaultParser(self): ...
3045

31-
getDefaultParser: Incomplete
32-
33-
def check_docinfo(elementtree, forbid_dtd: bool = ..., forbid_entities: bool = ...) -> None: ...
46+
def getDefaultParser(): ...
47+
def check_docinfo(elementtree, forbid_dtd: bool = False, forbid_entities: bool = True) -> None: ...
3448
def parse(
3549
source,
3650
parser: Incomplete | None = ...,
Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,22 @@
1+
from _typeshed import SupportsRead
2+
from typing import Final
13
from xml.dom.minidom import Document
4+
from xml.sax.xmlreader import XMLReader
25

3-
__origin__: str
6+
__origin__: Final = "xml.dom.minidom"
47

58
def parse(
6-
file,
7-
parser=None,
9+
file: str | SupportsRead[bytes | str],
10+
parser: XMLReader | None = None,
811
bufsize: int | None = None,
912
forbid_dtd: bool = False,
1013
forbid_entities: bool = True,
1114
forbid_external: bool = True,
1215
) -> Document: ...
1316
def parseString(
14-
string: str, parser=None, forbid_dtd: bool = False, forbid_entities: bool = True, forbid_external: bool = True
17+
string: str,
18+
parser: XMLReader | None = None,
19+
forbid_dtd: bool = False,
20+
forbid_entities: bool = True,
21+
forbid_external: bool = True,
1522
) -> Document: ...

stubs/defusedxml/defusedxml/pulldom.pyi

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
1+
from typing import Final
12
from xml.dom.pulldom import DOMEventStream
3+
from xml.sax import _SupportsReadClose
4+
from xml.sax.xmlreader import XMLReader
25

3-
from .expatreader import DefusedExpatParser
4-
5-
__origin__: str
6+
__origin__: Final = "xml.dom.pulldom"
67

78
def parse(
8-
stream_or_string,
9-
parser: DefusedExpatParser | None = None,
9+
stream_or_string: str | _SupportsReadClose[str] | _SupportsReadClose[bytes],
10+
parser: XMLReader | None = None,
1011
bufsize: int | None = None,
1112
forbid_dtd: bool = False,
1213
forbid_entities: bool = True,
1314
forbid_external: bool = True,
1415
) -> DOMEventStream: ...
1516
def parseString(
1617
string: str,
17-
parser: DefusedExpatParser | None = None,
18+
parser: XMLReader | None = None,
1819
forbid_dtd: bool = False,
1920
forbid_entities: bool = True,
2021
forbid_external: bool = True,
Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,26 @@
1-
from _typeshed import Incomplete
2-
from xml.sax import ErrorHandler as _ErrorHandler
1+
from _typeshed import ReadableBuffer, Unused
2+
from typing import Final
3+
from xml.sax import ErrorHandler as _ErrorHandler, _Source, xmlreader
4+
from xml.sax.handler import _ContentHandlerProtocol
35

46
from .expatreader import DefusedExpatParser
57

6-
__origin__: str
8+
__origin__: Final = "xml.sax"
79

810
def parse(
9-
source,
10-
handler,
11+
source: xmlreader.InputSource | _Source,
12+
handler: _ContentHandlerProtocol,
1113
errorHandler: _ErrorHandler = ...,
1214
forbid_dtd: bool = False,
1315
forbid_entities: bool = True,
1416
forbid_external: bool = True,
1517
) -> None: ...
1618
def parseString(
17-
string,
18-
handler,
19+
string: ReadableBuffer,
20+
handler: _ContentHandlerProtocol,
1921
errorHandler: _ErrorHandler = ...,
2022
forbid_dtd: bool = False,
2123
forbid_entities: bool = True,
2224
forbid_external: bool = True,
2325
) -> None: ...
24-
def make_parser(parser_list: list[Incomplete] = []) -> DefusedExpatParser: ...
26+
def make_parser(parser_list: Unused = []) -> DefusedExpatParser: ...

0 commit comments

Comments
 (0)