From 64903b85d7393bc77b612bae4f197ea7f3261a3e Mon Sep 17 00:00:00 2001 From: Stanislav Schmidt Date: Sun, 8 Aug 2021 20:49:06 +0200 Subject: [PATCH] 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 --- stubs/PyYAML/@tests/stubtest_allowlist.txt | 1 - stubs/PyYAML/yaml/__init__.pyi | 51 ++++++++++++++++++---- 2 files changed, 43 insertions(+), 9 deletions(-) diff --git a/stubs/PyYAML/@tests/stubtest_allowlist.txt b/stubs/PyYAML/@tests/stubtest_allowlist.txt index c5e594fd1..0b6324d2d 100644 --- a/stubs/PyYAML/@tests/stubtest_allowlist.txt +++ b/stubs/PyYAML/@tests/stubtest_allowlist.txt @@ -5,7 +5,6 @@ yaml.CDumper.__init__ yaml.CEmitter yaml.CParser yaml.YAMLObjectMetaclass.__init__ -yaml.add_constructor yaml.constructor.FullConstructor.set_python_instance_state yaml.cyaml.CBaseDumper.__init__ yaml.cyaml.CDangerDumper diff --git a/stubs/PyYAML/yaml/__init__.pyi b/stubs/PyYAML/yaml/__init__.pyi index ab01e00fa..17807a368 100644 --- a/stubs/PyYAML/yaml/__init__.pyi +++ b/stubs/PyYAML/yaml/__init__.pyi @@ -1,12 +1,14 @@ import sys -from typing import IO, Any, Callable, Iterator, Sequence, Text, Type, TypeVar, Union, overload +from typing import IO, Any, Callable, Iterable, Iterator, Pattern, Sequence, Text, Type, TypeVar, Union, overload +from yaml.constructor import BaseConstructor from yaml.dumper import * # noqa: F403 from yaml.error import * # noqa: F403 from yaml.events import * # noqa: F403 from yaml.loader import * # noqa: F403 from yaml.nodes import * # noqa: F403 from yaml.representer import BaseRepresenter +from yaml.resolver import BaseResolver from yaml.tokens import * # noqa: F403 from . import resolver as resolver # Help mypy a bit; this is implied by loader and dumper @@ -23,7 +25,8 @@ __with_libyaml__: Any __version__: str _T = TypeVar("_T") -_R = TypeVar("_R", bound=BaseRepresenter) +_Constructor = TypeVar("_Constructor", bound=BaseConstructor) +_Representer = TypeVar("_Representer", bound=BaseRepresenter) def scan(stream, Loader=...): ... def parse(stream, Loader=...): ... @@ -258,12 +261,44 @@ def safe_dump( tags=..., sort_keys: bool = ..., ) -> _Yaml: ... -def add_implicit_resolver(tag, regexp, first=..., Loader=..., Dumper=...): ... -def add_path_resolver(tag, path, kind=..., Loader=..., Dumper=...): ... -def add_constructor(tag: _Str, constructor: Callable[[Loader, Node], Any], Loader: Loader = ...): ... -def add_multi_constructor(tag_prefix, multi_constructor, Loader=...): ... -def add_representer(data_type: Type[_T], representer: Callable[[_R, _T], Node], Dumper: Type[_R] = ...) -> None: ... -def add_multi_representer(data_type: Type[_T], multi_representer: Callable[[_R, _T], Node], Dumper: Type[_R] = ...) -> None: ... +def add_implicit_resolver( + tag: _Str, + regexp: Pattern[str], + first: Iterable[Any] | None = ..., + Loader: Type[BaseResolver] | None = ..., + Dumper: Type[BaseResolver] = ..., +) -> None: ... +def add_path_resolver( + tag: _Str, + path: Iterable[Any], + kind: Type[Any] | None = ..., + Loader: Type[BaseResolver] | None = ..., + Dumper: Type[BaseResolver] = ..., +) -> None: ... +@overload +def add_constructor( + tag: _Str, constructor: Callable[[Loader | FullLoader | UnsafeLoader, Node], Any], Loader: None = ... +) -> None: ... +@overload +def add_constructor(tag: _Str, constructor: Callable[[_Constructor, Node], Any], Loader: Type[_Constructor]) -> None: ... +@overload +def add_multi_constructor( + tag_prefix: _Str, multi_constructor: Callable[[Loader | FullLoader | UnsafeLoader, _Str, Node], Any], Loader: None = ... +) -> None: ... +@overload +def add_multi_constructor( + tag_prefix: _Str, multi_constructor: Callable[[_Constructor, _Str, Node], Any], Loader: Type[_Constructor] +) -> None: ... +@overload +def add_representer(data_type: Type[_T], representer: Callable[[Dumper, _T], Node]) -> None: ... +@overload +def add_representer(data_type: Type[_T], representer: Callable[[_Representer, _T], Node], Dumper: Type[_Representer]) -> None: ... +@overload +def add_multi_representer(data_type: Type[_T], multi_representer: Callable[[Dumper, _T], Node]) -> None: ... +@overload +def add_multi_representer( + data_type: Type[_T], multi_representer: Callable[[_Representer, _T], Node], Dumper: Type[_Representer] +) -> None: ... class YAMLObjectMetaclass(type): def __init__(self, name, bases, kwds) -> None: ...