From 461289e18174d765d18382c821053f3e14b8b978 Mon Sep 17 00:00:00 2001 From: Tomoki Nakagawa <33854773+nakatomotoi@users.noreply.github.com> Date: Thu, 2 Jun 2022 02:23:20 +0900 Subject: [PATCH] PyYAML: Add types to `add_constructor` (#7989) --- stubs/PyYAML/yaml/constructor.pyi | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/stubs/PyYAML/yaml/constructor.pyi b/stubs/PyYAML/yaml/constructor.pyi index 1dc437453..27928032a 100644 --- a/stubs/PyYAML/yaml/constructor.pyi +++ b/stubs/PyYAML/yaml/constructor.pyi @@ -1,8 +1,13 @@ -from typing import Any, Pattern +from collections.abc import Callable +from typing import Any, Pattern, TypeVar from typing_extensions import TypeAlias from yaml.error import MarkedYAMLError -from yaml.nodes import ScalarNode +from yaml.loader import BaseLoader, FullLoader, Loader, SafeLoader, UnsafeLoader +from yaml.nodes import Node, ScalarNode + +_L = TypeVar("_L", bound=Loader | BaseLoader | FullLoader | SafeLoader | UnsafeLoader) +_N = TypeVar("_N", bound=Node) _Scalar: TypeAlias = str | int | float | bool | None @@ -27,7 +32,8 @@ class BaseConstructor: def construct_mapping(self, node, deep=...): ... def construct_pairs(self, node, deep=...): ... @classmethod - def add_constructor(cls, tag, constructor): ... + # Use typevars so we can have covariant behaviour in the parameter types + def add_constructor(cls, tag: str, constructor: Callable[[_L, _N], Any]) -> None: ... @classmethod def add_multi_constructor(cls, tag_prefix, multi_constructor): ...