Skip to content

Commit 8e6b7b2

Browse files
Fixes typing guard inside classes
1 parent 01b3a1a commit 8e6b7b2

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

src/sphinx_autodoc_typehints/__init__.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,12 @@ def _resolve_type_guarded_imports(obj: Any) -> None:
289289
for (_, part) in _TYPE_GUARD_IMPORT_RE.findall(module_code):
290290
guarded_code = textwrap.dedent(part)
291291
try:
292-
exec(guarded_code, obj.__globals__)
292+
# Some objects doesn't have the `__globals__` attribute like
293+
# classes, so we need to check before trying to access it.
294+
if hasattr(guarded_code, "__globals__"):
295+
exec(guarded_code, obj.__globals__)
296+
else:
297+
exec(guarded_code)
293298
except Exception as exc:
294299
_LOGGER.warning(f"Failed guarded type import with {exc!r}")
295300

tests/roots/test-resolve-typing-guard/demo_typing_guard.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,15 @@ def a(f: Decimal, s: AnyStr) -> Sequence[AnyStr | Decimal]:
2929
return [f, s]
3030

3131

32+
class SomeClass:
33+
"""This class do something."""
34+
35+
if TYPE_CHECKING: # Classes doesn't have `__globals__` attribute
36+
37+
def __getattr__(self, item: str): # noqa: U100
38+
"""This method do something."""
39+
40+
3241
__all__ = [
3342
"a",
3443
"ValueError",

0 commit comments

Comments
 (0)