summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy
diff options
context:
space:
mode:
authormike bayer <mike_mp@zzzcomputing.com>2021-06-21 19:20:27 +0000
committerGerrit Code Review <gerrit@ci3.zzzcomputing.com>2021-06-21 19:20:27 +0000
commit4dd4e9e4c5f6f4212d8101004e0815bc60f07b70 (patch)
tree1ea0e20ab648655b589f10d5f220c3a42bcb65b3 /lib/sqlalchemy
parent7ffcc8ec0c6faf18f3dbbc2ac01ab391933d7a81 (diff)
parent6ca7c2eb5294c255b3c1f62ec1445e3e5d52d4ba (diff)
downloadsqlalchemy-4dd4e9e4c5f6f4212d8101004e0815bc60f07b70.tar.gz
Merge "accommodate no cls info found in _scan_declarative"
Diffstat (limited to 'lib/sqlalchemy')
-rw-r--r--lib/sqlalchemy/ext/mypy/decl_class.py5
-rw-r--r--lib/sqlalchemy/ext/mypy/util.py2
2 files changed, 6 insertions, 1 deletions
diff --git a/lib/sqlalchemy/ext/mypy/decl_class.py b/lib/sqlalchemy/ext/mypy/decl_class.py
index 2870eeb6f..61737fd66 100644
--- a/lib/sqlalchemy/ext/mypy/decl_class.py
+++ b/lib/sqlalchemy/ext/mypy/decl_class.py
@@ -50,7 +50,10 @@ def _scan_declarative_assignments_and_apply_types(
info = util._info_for_cls(cls, api)
- if cls.fullname.startswith("builtins"):
+ if info is None:
+ # this can occur during cached passes
+ return None
+ elif cls.fullname.startswith("builtins"):
return None
elif "_sa_decl_class_applied" in info.metadata:
cls_metadata = util.DeclClassApplied.deserialize(
diff --git a/lib/sqlalchemy/ext/mypy/util.py b/lib/sqlalchemy/ext/mypy/util.py
index 26bb0ac67..67c3fa209 100644
--- a/lib/sqlalchemy/ext/mypy/util.py
+++ b/lib/sqlalchemy/ext/mypy/util.py
@@ -208,6 +208,8 @@ def _info_for_cls(
) -> TypeInfo:
if cls.info is CLASSDEF_NO_INFO:
sym = api.lookup_qualified(cls.name, cls)
+ if sym is None:
+ return None
assert sym and isinstance(sym.node, TypeInfo)
return sym.node