]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
fixes for mypy 0.971
authorMike Bayer <mike_mp@zzzcomputing.com>
Tue, 19 Jul 2022 17:03:51 +0000 (13:03 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Tue, 19 Jul 2022 18:26:05 +0000 (14:26 -0400)
things that were passing with 0.961 need adjustment.
it seems mypy has become very pedantic about the difference
between importing from a module vs. accessing members of that
module as instance variables, so adjust the preloaded
typing block to be explicitly instance variables, since that's
how the accessor works in any case.

Change-Id: I746a3c9102530b7cf9b123aec7be6376657c1169

lib/sqlalchemy/orm/exc.py
lib/sqlalchemy/orm/relationships.py
lib/sqlalchemy/orm/strategies.py
lib/sqlalchemy/sql/__init__.py
lib/sqlalchemy/sql/cache_key.py
lib/sqlalchemy/util/preloaded.py
tox.ini

index 57e5fe8c6e9fd917acbeb1847d799dcc0f958254..9b32e3a3123f493fe157b09a9befc8275282dbda 100644 (file)
@@ -213,7 +213,7 @@ def _default_unmapped(cls: Type[Any]) -> Optional[str]:
     base = util.preloaded.orm_base
 
     try:
-        mappers = base.manager_of_class(cls).mappers
+        mappers = base.manager_of_class(cls).mappers  # type: ignore
     except (
         UnmappedClassError,
         TypeError,
index 77a95a195b6b1bb0b9a6bfede141e369d0b89e3a..669a2047c948c7bdfe167230c6acb3a6438700b0 100644 (file)
@@ -2055,7 +2055,7 @@ class Relationship(
         if self.uselist is None:
             self.uselist = self.direction is not MANYTOONE
         if not self.viewonly:
-            self._dependency_processor = (
+            self._dependency_processor = (  # type: ignore
                 dependency.DependencyProcessor.from_relationship
             )(self)
 
index db9dcffdc154099554d515297f4a9f1eeb98faee..2c707439a1fc0d74e58e8d1a8c82c676be07ddad 100644 (file)
@@ -543,7 +543,7 @@ class DeferredColumnLoader(LoaderStrategy):
 class LoadDeferredColumns:
     """serializable loader object used by DeferredColumnLoader"""
 
-    def __init__(self, key, raiseload=False):
+    def __init__(self, key: str, raiseload: bool = False):
         self.key = key
         self.raiseload = raiseload
 
index c3ebb4596066b47e82c36050b6f87a2fcf6d9aa8..5702d6c250c022e70c1d4aaea0f27964ed6d2d88 100644 (file)
@@ -5,6 +5,7 @@
 # This module is part of SQLAlchemy and is released under
 # the MIT License: https://www.opensource.org/licenses/mit-license.php
 from typing import Any
+from typing import TYPE_CHECKING
 
 from .base import Executable as Executable
 from .compiler import COLLECT_CARTESIAN_PRODUCTS as COLLECT_CARTESIAN_PRODUCTS
@@ -114,13 +115,14 @@ def __go(lcls: Any) -> None:
     from . import traversals
     from . import type_api
 
-    base.coercions = elements.coercions = coercions
-    base.elements = elements
-    base.type_api = type_api
-    coercions.elements = elements
-    coercions.lambdas = lambdas
-    coercions.schema = schema
-    coercions.selectable = selectable
+    if not TYPE_CHECKING:
+        base.coercions = elements.coercions = coercions
+        base.elements = elements
+        base.type_api = type_api
+        coercions.elements = elements
+        coercions.lambdas = lambdas
+        coercions.schema = schema
+        coercions.selectable = selectable
 
     from .annotation import _prepare_annotations
     from .annotation import Annotated
index 5922c2db01853bccc76e92f531347236427b9ac3..88148285c58df055352592bf8f8d059fe1d90c72 100644 (file)
@@ -272,7 +272,7 @@ class HasCacheKey:
                 elif meth is ANON_NAME:
                     elements = util.preloaded.sql_elements
                     if isinstance(obj, elements._anonymous_label):
-                        obj = obj.apply_map(anon_map)
+                        obj = obj.apply_map(anon_map)  # type: ignore
                     result += (attrname, obj)
                 elif meth is CALL_GEN_CACHE_KEY:
                     result += (
index 67394c9a3a2b4d391fad44eaf1e2992a19f52275..6332b3c9437d9d0d0cf6eec0c54efedba92bb95e 100644 (file)
@@ -13,8 +13,6 @@ runtime.
 from __future__ import annotations
 
 import sys
-from types import ModuleType
-import typing
 from typing import Any
 from typing import Callable
 from typing import TYPE_CHECKING
@@ -24,17 +22,71 @@ _FN = TypeVar("_FN", bound=Callable[..., Any])
 
 
 if TYPE_CHECKING:
-    from sqlalchemy.engine import default as engine_default  # noqa
-    from sqlalchemy.orm import clsregistry as orm_clsregistry  # noqa
-    from sqlalchemy.orm import decl_api as orm_decl_api  # noqa
-    from sqlalchemy.orm import properties as orm_properties  # noqa
-    from sqlalchemy.orm import relationships as orm_relationships  # noqa
-    from sqlalchemy.orm import session as orm_session  # noqa
-    from sqlalchemy.orm import state as orm_state  # noqa
-    from sqlalchemy.orm import util as orm_util  # noqa
-    from sqlalchemy.sql import dml as sql_dml  # noqa
-    from sqlalchemy.sql import functions as sql_functions  # noqa
-    from sqlalchemy.sql import util as sql_util  # noqa
+    from sqlalchemy import dialects as _dialects
+    from sqlalchemy import orm as _orm
+    from sqlalchemy.engine import cursor as _engine_cursor
+    from sqlalchemy.engine import default as _engine_default
+    from sqlalchemy.engine import reflection as _engine_reflection
+    from sqlalchemy.engine import result as _engine_result
+    from sqlalchemy.engine import url as _engine_url
+    from sqlalchemy.orm import base as _orm_base
+    from sqlalchemy.orm import clsregistry as _orm_clsregistry
+    from sqlalchemy.orm import decl_api as _orm_decl_api
+    from sqlalchemy.orm import decl_base as _orm_decl_base
+    from sqlalchemy.orm import dependency as _orm_dependency
+    from sqlalchemy.orm import descriptor_props as _orm_descriptor_props
+    from sqlalchemy.orm import mapper as _orm_mapper
+    from sqlalchemy.orm import properties as _orm_properties
+    from sqlalchemy.orm import relationships as _orm_relationships
+    from sqlalchemy.orm import session as _orm_session
+    from sqlalchemy.orm import state as _orm_state
+    from sqlalchemy.orm import strategies as _orm_strategies
+    from sqlalchemy.orm import strategy_options as _orm_strategy_options
+    from sqlalchemy.orm import util as _orm_util
+    from sqlalchemy.sql import default_comparator as _sql_default_comparator
+    from sqlalchemy.sql import dml as _sql_dml
+    from sqlalchemy.sql import elements as _sql_elements
+    from sqlalchemy.sql import functions as _sql_functions
+    from sqlalchemy.sql import naming as _sql_naming
+    from sqlalchemy.sql import schema as _sql_schema
+    from sqlalchemy.sql import selectable as _sql_selectable
+    from sqlalchemy.sql import sqltypes as _sql_sqltypes
+    from sqlalchemy.sql import traversals as _sql_traversals
+    from sqlalchemy.sql import util as _sql_util
+
+    # sigh, appease mypy 0.971 which does not accept imports as instance
+    # variables of a module
+    dialects = _dialects
+    engine_cursor = _engine_cursor
+    engine_default = _engine_default
+    engine_reflection = _engine_reflection
+    engine_result = _engine_result
+    engine_url = _engine_url
+    orm_clsregistry = _orm_clsregistry
+    orm_base = _orm_base
+    orm = _orm
+    orm_decl_api = _orm_decl_api
+    orm_decl_base = _orm_decl_base
+    orm_descriptor_props = _orm_descriptor_props
+    orm_dependency = _orm_dependency
+    orm_mapper = _orm_mapper
+    orm_properties = _orm_properties
+    orm_relationships = _orm_relationships
+    orm_session = _orm_session
+    orm_strategies = _orm_strategies
+    orm_strategy_options = _orm_strategy_options
+    orm_state = _orm_state
+    orm_util = _orm_util
+    sql_default_comparator = _sql_default_comparator
+    sql_dml = _sql_dml
+    sql_elements = _sql_elements
+    sql_functions = _sql_functions
+    sql_naming = _sql_naming
+    sql_selectable = _sql_selectable
+    sql_traversals = _sql_traversals
+    sql_schema = _sql_schema
+    sql_sqltypes = _sql_sqltypes
+    sql_util = _sql_util
 
 
 class _ModuleRegistry:
@@ -85,17 +137,12 @@ class _ModuleRegistry:
                 __import__(module, globals(), locals())
                 self.__dict__[key] = globals()[key] = sys.modules[module]
 
-    if typing.TYPE_CHECKING:
-
-        def __getattr__(self, key: str) -> ModuleType:
-            ...
-
 
 _reg = _ModuleRegistry()
 preload_module = _reg.preload_module
 import_prefix = _reg.import_prefix
 
-if TYPE_CHECKING:
-
-    def __getattr__(key: str) -> ModuleType:
-        ...
+# this appears to do absolutely nothing for any version of mypy
+# if TYPE_CHECKING:
+#    def __getattr__(key: str) -> ModuleType:
+#        ...
diff --git a/tox.ini b/tox.ini
index d966d9807d049a81161f4b0d8b5978e445d6b43b..ec51a939c5846bfa10232361f45ddb8a9479f43f 100644 (file)
--- a/tox.ini
+++ b/tox.ini
@@ -133,8 +133,7 @@ commands=
 deps=
      greenlet != 0.4.17
      importlib_metadata; python_version < '3.8'
-     mypy
-     # pyright
+     mypy >= 0.971
 commands =
     mypy  ./lib/sqlalchemy
     # pyright changes too often with not-exactly-correct errors