From 719ee429a7abfc4f86bd22a1c099d3b7251c7887 Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Wed, 22 Dec 2021 09:11:27 +0100 Subject: [PATCH 1/3] Use builtin.type instead of typing.Type --- stubs/SQLAlchemy/sqlalchemy/orm/decl_api.pyi | 40 ++++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/stubs/SQLAlchemy/sqlalchemy/orm/decl_api.pyi b/stubs/SQLAlchemy/sqlalchemy/orm/decl_api.pyi index c6261166263e..482f4d3fca53 100644 --- a/stubs/SQLAlchemy/sqlalchemy/orm/decl_api.pyi +++ b/stubs/SQLAlchemy/sqlalchemy/orm/decl_api.pyi @@ -1,13 +1,13 @@ from collections.abc import Callable -from typing import Any, ClassVar, Type, TypeVar, overload +from typing import Any, ClassVar, TypeVar, overload from ..engine.interfaces import Connectable from ..sql.schema import MetaData from ..util import hybridproperty from . import interfaces -_ClsT = TypeVar("_ClsT", bound=Type[Any]) -_DeclT = TypeVar("_DeclT", bound=Type[_DeclarativeBase]) +_ClsT = TypeVar("_ClsT", bound=type[Any]) +_DeclT = TypeVar("_DeclT", bound=type[_DeclarativeBase]) # Dynamic class as created by registry.generate_base() via DeclarativeMeta # or another metaclass. This class does not exist at runtime. @@ -21,12 +21,12 @@ class _DeclarativeBase(Any): # super classes are dynamic __class_getitem__: ClassVar[Any] # Meta class (or function) that creates a _DeclarativeBase class. -_DeclarativeBaseMeta = Callable[[str, tuple[Type[Any], ...], dict[str, Any]], _DeclT] +_DeclarativeBaseMeta = Callable[[str, tuple[type[Any], ...], dict[str, Any]], _DeclT] -def has_inherited_table(cls: Type[Any]) -> bool: ... +def has_inherited_table(cls: type[Any]) -> bool: ... class DeclarativeMeta(type): - def __init__(cls, classname: str, bases: tuple[Type[Any], ...], dict_: dict[str, Any], **kw: object) -> None: ... + def __init__(cls, classname: str, bases: tuple[type[Any], ...], dict_: dict[str, Any], **kw: object) -> None: ... def __setattr__(cls, key: str, value: Any) -> None: ... def __delattr__(cls, key: str) -> None: ... @@ -49,20 +49,20 @@ def declarative_base( bind: Connectable | None = ..., metadata: MetaData | None = ..., mapper: Any | None = ..., - cls: Type[Any] | tuple[Type[Any], ...] = ..., + cls: type[Any] | tuple[type[Any], ...] = ..., name: str = ..., constructor: Callable[..., None] = ..., - class_registry: dict[str, Type[Any]] | None = ..., -) -> Type[_DeclarativeBase]: ... + class_registry: dict[str, type[Any]] | None = ..., +) -> type[_DeclarativeBase]: ... @overload def declarative_base( bind: Connectable | None = ..., metadata: MetaData | None = ..., mapper: Any | None = ..., - cls: Type[Any] | tuple[Type[Any], ...] = ..., + cls: type[Any] | tuple[type[Any], ...] = ..., name: str = ..., constructor: Callable[..., None] = ..., - class_registry: dict[str, Type[Any]] | None = ..., + class_registry: dict[str, type[Any]] | None = ..., *, metaclass: _DeclarativeBaseMeta[_DeclT], ) -> _DeclT: ... @@ -71,10 +71,10 @@ def declarative_base( bind: Connectable | None, metadata: MetaData | None, mapper: Any | None, - cls: Type[Any] | tuple[Type[Any], ...], + cls: type[Any] | tuple[type[Any], ...], name: str, constructor: Callable[..., None], - class_registry: dict[str, Type[Any]] | None, + class_registry: dict[str, type[Any]] | None, metaclass: _DeclarativeBaseMeta[_DeclT], ) -> _DeclT: ... @@ -84,7 +84,7 @@ class registry: def __init__( self, metadata: MetaData | None = ..., - class_registry: dict[str, Type[Any]] | None = ..., + class_registry: dict[str, type[Any]] | None = ..., constructor: Callable[..., None] = ..., _bind: Connectable | None = ..., ) -> None: ... @@ -94,21 +94,21 @@ class registry: def dispose(self, cascade: bool = ...) -> None: ... @overload def generate_base( - self, mapper: Any | None = ..., cls: Type[Any] | tuple[Type[Any], ...] = ..., name: str = ... - ) -> Type[_DeclarativeBase]: ... + self, mapper: Any | None = ..., cls: type[Any] | tuple[type[Any], ...] = ..., name: str = ... + ) -> type[_DeclarativeBase]: ... @overload def generate_base( self, mapper: Any | None = ..., - cls: Type[Any] | tuple[Type[Any], ...] = ..., + cls: type[Any] | tuple[type[Any], ...] = ..., name: str = ..., *, metaclass: _DeclarativeBaseMeta[_DeclT], ) -> _DeclT: ... @overload def generate_base( - self, mapper: Any | None, cls: Type[Any] | tuple[Type[Any], ...], name: str, metaclass: _DeclarativeBaseMeta[_DeclT] - ) -> Type[_DeclarativeBase]: ... + self, mapper: Any | None, cls: type[Any] | tuple[type[Any], ...], name: str, metaclass: _DeclarativeBaseMeta[_DeclT] + ) -> type[_DeclarativeBase]: ... def mapped(self, cls: _ClsT) -> _ClsT: ... # Return type of the callable is a _DeclarativeBase class with the passed in class as base. # This could be better approximated with Intersection[PassedInClass, _DeclarativeBase]. @@ -122,7 +122,7 @@ def as_declarative( *, bind: Connectable | None = ..., metadata: MetaData | None = ..., - class_registry: dict[str, Type[Any]] | None = ..., + class_registry: dict[str, type[Any]] | None = ..., mapper: Any | None = ..., metaclass: _DeclarativeBaseMeta[_DeclT] = ..., ) -> Callable[[_ClsT], _ClsT | _DeclT | Any]: ... From abe63e7d648138fe0185ac96fcdb53a1cb5847ba Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Wed, 22 Dec 2021 09:21:39 +0100 Subject: [PATCH 2/3] Update to mypy 0.921 Test third-party stubs with typeshed from mypy --- requirements-tests.txt | 2 +- tests/mypy_test.py | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 318c0358ab0f..0e523178a50e 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -1,4 +1,4 @@ -mypy==0.920 +mypy==0.921 pytype==2021.11.29; platform_system != "Windows" # must match .pre-commit-config.yaml black==21.12b0 diff --git a/tests/mypy_test.py b/tests/mypy_test.py index 8c5bfc158bba..c1f680545cb6 100755 --- a/tests/mypy_test.py +++ b/tests/mypy_test.py @@ -277,8 +277,7 @@ def test_third_party_distribution(distribution: str, major: int, minor: int, arg print("--- no files found ---") sys.exit(1) - # TODO: remove custom_typeshed after mypy 0.920 is released - code = run_mypy(args, configurations, major, minor, files, custom_typeshed=True) + code = run_mypy(args, configurations, major, minor, files) return code, len(files) @@ -326,8 +325,7 @@ def main(): files_checked += len(files) # Test files of all third party distributions. - # TODO: remove custom_typeshed after mypy 0.920 is released - print("Running mypy " + " ".join(get_mypy_flags(args, major, minor, "/tmp/...", custom_typeshed=True))) + print("Running mypy " + " ".join(get_mypy_flags(args, major, minor, "/tmp/..."))) for distribution in sorted(os.listdir("stubs")): if not is_supported(distribution, major): continue From ffba5e8964f0d00788fa02f233bd8892f001dd60 Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Thu, 23 Dec 2021 11:01:35 +0100 Subject: [PATCH 3/3] Add execution_options argument to Session.get() --- stubs/SQLAlchemy/sqlalchemy/orm/scoping.pyi | 1 + stubs/SQLAlchemy/sqlalchemy/orm/session.pyi | 1 + 2 files changed, 2 insertions(+) diff --git a/stubs/SQLAlchemy/sqlalchemy/orm/scoping.pyi b/stubs/SQLAlchemy/sqlalchemy/orm/scoping.pyi index 23985d76620d..7d739982b4c1 100644 --- a/stubs/SQLAlchemy/sqlalchemy/orm/scoping.pyi +++ b/stubs/SQLAlchemy/sqlalchemy/orm/scoping.pyi @@ -70,6 +70,7 @@ class scoped_session(ScopedSessionMixin): populate_existing: bool = ..., with_for_update: Any | None = ..., identity_token: Any | None = ..., + execution_options: Any | None = ..., ): ... def get_bind( self, diff --git a/stubs/SQLAlchemy/sqlalchemy/orm/session.pyi b/stubs/SQLAlchemy/sqlalchemy/orm/session.pyi index 58e14f06af77..bb7477e077e0 100644 --- a/stubs/SQLAlchemy/sqlalchemy/orm/session.pyi +++ b/stubs/SQLAlchemy/sqlalchemy/orm/session.pyi @@ -157,6 +157,7 @@ class Session(_SessionClassMethods): populate_existing: bool = ..., with_for_update: Any | None = ..., identity_token: Any | None = ..., + execution_options: Any | None = ..., ): ... def merge(self, instance, load: bool = ..., options: Any | None = ...): ... def enable_relationship_loading(self, obj) -> None: ...