From 8461c61624621db04de619fb0dd35a09c11e7cb2 Mon Sep 17 00:00:00 2001 From: Fabian Keller Date: Fri, 20 May 2022 19:27:39 +0200 Subject: [PATCH 1/2] fix #12717 --- mypy/stubgenc.py | 2 +- .../pybind11_mypy_demo/stubgen/pybind11_mypy_demo/basics.pyi | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/mypy/stubgenc.py b/mypy/stubgenc.py index 682ed418ffc7..d681b301cca1 100755 --- a/mypy/stubgenc.py +++ b/mypy/stubgenc.py @@ -288,7 +288,7 @@ def infer_prop_type(docstr: Optional[str]) -> Optional[str]: return None # Ignore special properties/attributes. - if name.startswith('__') and name.endswith('__'): + if name in {'__module__', '__annotations__', '__doc__'}: return inferred = infer_prop_type(getattr(obj, '__doc__', None)) diff --git a/test-data/pybind11_mypy_demo/stubgen/pybind11_mypy_demo/basics.pyi b/test-data/pybind11_mypy_demo/stubgen/pybind11_mypy_demo/basics.pyi index 226080ac9d57..ab5a4f4e78d2 100644 --- a/test-data/pybind11_mypy_demo/stubgen/pybind11_mypy_demo/basics.pyi +++ b/test-data/pybind11_mypy_demo/stubgen/pybind11_mypy_demo/basics.pyi @@ -5,6 +5,7 @@ PI: float class Point: class AngleUnit: + __members__: ClassVar[dict] = ... # read-only __entries: ClassVar[dict] = ... degree: ClassVar[Point.AngleUnit] = ... radian: ClassVar[Point.AngleUnit] = ... @@ -22,6 +23,7 @@ class Point: def value(self) -> int: ... class LengthUnit: + __members__: ClassVar[dict] = ... # read-only __entries: ClassVar[dict] = ... inch: ClassVar[Point.LengthUnit] = ... mm: ClassVar[Point.LengthUnit] = ... From 191db4f7b1f47a49f4befb7c0aca3143895af273 Mon Sep 17 00:00:00 2001 From: Fabian Keller Date: Sat, 21 May 2022 09:23:59 +0200 Subject: [PATCH 2/2] improve dunder filtering logic --- mypy/stubgenc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mypy/stubgenc.py b/mypy/stubgenc.py index d681b301cca1..9f90c7aafe69 100755 --- a/mypy/stubgenc.py +++ b/mypy/stubgenc.py @@ -288,7 +288,7 @@ def infer_prop_type(docstr: Optional[str]) -> Optional[str]: return None # Ignore special properties/attributes. - if name in {'__module__', '__annotations__', '__doc__'}: + if is_skipped_attribute(name): return inferred = infer_prop_type(getattr(obj, '__doc__', None))