Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 64903b8

Browse files
authored
PyYAML: fix yaml.add_foo() functions (#5828)
Added / modified types for the following functions: - `add_implicit_resolver(...)` - `add_path_resolver(...)` - `add_constructor(...)` - `add_multi_constructor(...)` - `add_representer(...)` - `add_multi_representer(...)` * Remove yaml.add_constructor from allowlist * Use TypeVars and overloads
1 parent 7edad10 commit 64903b8

2 files changed

Lines changed: 43 additions & 9 deletions

File tree

stubs/PyYAML/@tests/stubtest_allowlist.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ yaml.CDumper.__init__
55
yaml.CEmitter
66
yaml.CParser
77
yaml.YAMLObjectMetaclass.__init__
8-
yaml.add_constructor
98
yaml.constructor.FullConstructor.set_python_instance_state
109
yaml.cyaml.CBaseDumper.__init__
1110
yaml.cyaml.CDangerDumper

stubs/PyYAML/yaml/__init__.pyi

Lines changed: 43 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import sys
2-
from typing import IO, Any, Callable, Iterator, Sequence, Text, Type, TypeVar, Union, overload
2+
from typing import IO, Any, Callable, Iterable, Iterator, Pattern, Sequence, Text, Type, TypeVar, Union, overload
33

4+
from yaml.constructor import BaseConstructor
45
from yaml.dumper import * # noqa: F403
56
from yaml.error import * # noqa: F403
67
from yaml.events import * # noqa: F403
78
from yaml.loader import * # noqa: F403
89
from yaml.nodes import * # noqa: F403
910
from yaml.representer import BaseRepresenter
11+
from yaml.resolver import BaseResolver
1012
from yaml.tokens import * # noqa: F403
1113

1214
from . import resolver as resolver # Help mypy a bit; this is implied by loader and dumper
@@ -23,7 +25,8 @@ __with_libyaml__: Any
2325
__version__: str
2426

2527
_T = TypeVar("_T")
26-
_R = TypeVar("_R", bound=BaseRepresenter)
28+
_Constructor = TypeVar("_Constructor", bound=BaseConstructor)
29+
_Representer = TypeVar("_Representer", bound=BaseRepresenter)
2730

2831
def scan(stream, Loader=...): ...
2932
def parse(stream, Loader=...): ...
@@ -258,12 +261,44 @@ def safe_dump(
258261
tags=...,
259262
sort_keys: bool = ...,
260263
) -> _Yaml: ...
261-
def add_implicit_resolver(tag, regexp, first=..., Loader=..., Dumper=...): ...
262-
def add_path_resolver(tag, path, kind=..., Loader=..., Dumper=...): ...
263-
def add_constructor(tag: _Str, constructor: Callable[[Loader, Node], Any], Loader: Loader = ...): ...
264-
def add_multi_constructor(tag_prefix, multi_constructor, Loader=...): ...
265-
def add_representer(data_type: Type[_T], representer: Callable[[_R, _T], Node], Dumper: Type[_R] = ...) -> None: ...
266-
def add_multi_representer(data_type: Type[_T], multi_representer: Callable[[_R, _T], Node], Dumper: Type[_R] = ...) -> None: ...
264+
def add_implicit_resolver(
265+
tag: _Str,
266+
regexp: Pattern[str],
267+
first: Iterable[Any] | None = ...,
268+
Loader: Type[BaseResolver] | None = ...,
269+
Dumper: Type[BaseResolver] = ...,
270+
) -> None: ...
271+
def add_path_resolver(
272+
tag: _Str,
273+
path: Iterable[Any],
274+
kind: Type[Any] | None = ...,
275+
Loader: Type[BaseResolver] | None = ...,
276+
Dumper: Type[BaseResolver] = ...,
277+
) -> None: ...
278+
@overload
279+
def add_constructor(
280+
tag: _Str, constructor: Callable[[Loader | FullLoader | UnsafeLoader, Node], Any], Loader: None = ...
281+
) -> None: ...
282+
@overload
283+
def add_constructor(tag: _Str, constructor: Callable[[_Constructor, Node], Any], Loader: Type[_Constructor]) -> None: ...
284+
@overload
285+
def add_multi_constructor(
286+
tag_prefix: _Str, multi_constructor: Callable[[Loader | FullLoader | UnsafeLoader, _Str, Node], Any], Loader: None = ...
287+
) -> None: ...
288+
@overload
289+
def add_multi_constructor(
290+
tag_prefix: _Str, multi_constructor: Callable[[_Constructor, _Str, Node], Any], Loader: Type[_Constructor]
291+
) -> None: ...
292+
@overload
293+
def add_representer(data_type: Type[_T], representer: Callable[[Dumper, _T], Node]) -> None: ...
294+
@overload
295+
def add_representer(data_type: Type[_T], representer: Callable[[_Representer, _T], Node], Dumper: Type[_Representer]) -> None: ...
296+
@overload
297+
def add_multi_representer(data_type: Type[_T], multi_representer: Callable[[Dumper, _T], Node]) -> None: ...
298+
@overload
299+
def add_multi_representer(
300+
data_type: Type[_T], multi_representer: Callable[[_Representer, _T], Node], Dumper: Type[_Representer]
301+
) -> None: ...
267302

268303
class YAMLObjectMetaclass(type):
269304
def __init__(self, name, bases, kwds) -> None: ...

0 commit comments

Comments
 (0)