From 61e63293f1defa2d14020262fd3c1a190d4c457d Mon Sep 17 00:00:00 2001 From: David Euresti Date: Sat, 24 Feb 2018 13:00:15 -0800 Subject: [PATCH] Work around mypy issue #4554 in attrs. (#1914) --- third_party/2and3/attr/__init__.pyi | 46 +++++++++++++++++++++++++---- 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/third_party/2and3/attr/__init__.pyi b/third_party/2and3/attr/__init__.pyi index 903c61350..56641ead4 100644 --- a/third_party/2and3/attr/__init__.pyi +++ b/third_party/2and3/attr/__init__.pyi @@ -66,7 +66,19 @@ class Attribute(Generic[_T]): # This makes this type of assignments possible: # x: int = attr(8) -# 1st form catches _T set. +# 1st form catches _T set and works around mypy issue #4554 +@overload +def attrib(default: _T, + validator: Optional[_ValidatorArgType[_T]] = ..., + repr: bool = ..., + cmp: bool = ..., + hash: Optional[bool] = ..., + init: bool = ..., + convert: Optional[_ConverterType[_T]] = ..., + metadata: Optional[Mapping[Any, Any]] = ..., + type: Optional[Type[_T]] = ..., + converter: Optional[_ConverterType[_T]] = ...) -> _T: ... +# 2nd one with an optional default. @overload def attrib(default: Optional[_T] = ..., validator: Optional[_ValidatorArgType[_T]] = ..., @@ -78,7 +90,7 @@ def attrib(default: Optional[_T] = ..., metadata: Optional[Mapping[Any, Any]] = ..., type: Optional[Type[_T]] = ..., converter: Optional[_ConverterType[_T]] = ...) -> _T: ... -# 2nd form no _T , so returns Any. +# 3rd form no _T , so returns Any. @overload def attrib(default: None = ..., validator: None = ..., @@ -86,11 +98,11 @@ def attrib(default: None = ..., cmp: bool = ..., hash: Optional[bool] = ..., init: bool = ..., - convert: Optional[_ConverterType[_T]] = ..., + convert: None = ..., metadata: Optional[Mapping[Any, Any]] = ..., type: None = ..., converter: None = ...) -> Any: ... -# 3rd form covers non-Type: e.g. forward references (str), Any +# 4th form covers type=non-Type: e.g. forward references (str), Any @overload def attrib(default: Optional[_T] = ..., validator: Optional[_ValidatorArgType[_T]] = ..., @@ -191,6 +203,17 @@ def get_run_validators() -> bool: ... # dataclass = attrs # Technically, partial(attrs, auto_attribs=True) ;) +@overload +def ib(default: _T, + validator: Optional[_ValidatorArgType[_T]] = ..., + repr: bool = ..., + cmp: bool = ..., + hash: Optional[bool] = ..., + init: bool = ..., + convert: Optional[_ConverterType[_T]] = ..., + metadata: Optional[Mapping[Any, Any]] = ..., + type: Optional[Type[_T]] = ..., + converter: Optional[_ConverterType[_T]] = ...) -> _T: ... @overload def ib(default: Optional[_T] = ..., validator: Optional[_ValidatorArgType[_T]] = ..., @@ -209,7 +232,7 @@ def ib(default: None = ..., cmp: bool = ..., hash: Optional[bool] = ..., init: bool = ..., - convert: Optional[_ConverterType[_T]] = ..., + convert: None = ..., metadata: Optional[Mapping[Any, Any]] = ..., type: None = ..., converter: None = ...) -> Any: ... @@ -226,6 +249,17 @@ def ib(default: Optional[_T] = ..., converter: Optional[_ConverterType[_T]] = ...) -> Any: ... @overload +def attr(default: _T, + validator: Optional[_ValidatorArgType[_T]] = ..., + repr: bool = ..., + cmp: bool = ..., + hash: Optional[bool] = ..., + init: bool = ..., + convert: Optional[_ConverterType[_T]] = ..., + metadata: Optional[Mapping[Any, Any]] = ..., + type: Optional[Type[_T]] = ..., + converter: Optional[_ConverterType[_T]] = ...) -> _T: ... +@overload def attr(default: Optional[_T] = ..., validator: Optional[_ValidatorArgType[_T]] = ..., repr: bool = ..., @@ -243,7 +277,7 @@ def attr(default: None = ..., cmp: bool = ..., hash: Optional[bool] = ..., init: bool = ..., - convert: Optional[_ConverterType[_T]] = ..., + convert: None = ..., metadata: Optional[Mapping[Any, Any]] = ..., type: None = ..., converter: None = ...) -> Any: ...