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
This commit is contained in:
Stanislav Schmidt
2021-08-08 20:49:06 +02:00
committed by GitHub
parent 7edad1034e
commit 64903b85d7
2 changed files with 43 additions and 9 deletions

View File

@@ -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

View File

@@ -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: ...