diff --git a/stubs/SQLAlchemy/@tests/stubtest_allowlist.txt b/stubs/SQLAlchemy/@tests/stubtest_allowlist.txt index 4340d7742..7087b6fc8 100644 --- a/stubs/SQLAlchemy/@tests/stubtest_allowlist.txt +++ b/stubs/SQLAlchemy/@tests/stubtest_allowlist.txt @@ -1,120 +1,29 @@ -# wrong argument name in implementation ("self" instead of "cls") -sqlalchemy.engine.URL.__new__ -sqlalchemy.engine.url.URL.__new__ -sqlalchemy.util.langhelpers._symbol.__new__ - -# unnecessary re-exports -sqlalchemy.util._collections.* -sqlalchemy.util.compat.* - -# forwards arguments to another function +# Expanding keyword arguments in stubs sqlalchemy.ext.declarative.as_declarative -# stdlib re-exports with stubtest issues -sqlalchemy.orm.collections.InstrumentedList.* -sqlalchemy.orm.collections.InstrumentedSet.* -sqlalchemy.orm.collections.MappedCollection.* -sqlalchemy.util.StringIO.* - -# method arguments starting with double underscores in the implementation -sqlalchemy.testing.resolve_lambda -sqlalchemy.testing.util.resolve_lambda -sqlalchemy.util.WeakSequence.__init__ - # not always present sqlalchemy.engine.Engine.logging_name # initialized if not None sqlalchemy.engine.base.Engine.logging_name # initialized if not None sqlalchemy.sql.lambdas.PyWrapper.__clause_element__ sqlalchemy.testing.util.non_refcount_gc_collect -# replaced at runtime -sqlalchemy.orm.strategy_options.contains_eager -sqlalchemy.orm.strategy_options.load_only -sqlalchemy.orm.strategy_options.joinedload -sqlalchemy.orm.strategy_options.subqueryload -sqlalchemy.orm.strategy_options.selectinload -sqlalchemy.orm.strategy_options.lazyload -sqlalchemy.orm.strategy_options.immediateload -sqlalchemy.orm.strategy_options.noload -sqlalchemy.orm.strategy_options.raiseload -sqlalchemy.orm.strategy_options.defaultload -sqlalchemy.orm.strategy_options.defer -sqlalchemy.orm.strategy_options.undefer -sqlalchemy.orm.strategy_options.undefer_group -sqlalchemy.orm.strategy_options.with_expression -sqlalchemy.orm.strategy_options.selectin_polymorphic -sqlalchemy.testing.provision.configure_follower -sqlalchemy.testing.provision.create_db -sqlalchemy.testing.provision.drop_all_schema_objects_post_tables -sqlalchemy.testing.provision.drop_all_schema_objects_pre_tables -sqlalchemy.testing.provision.drop_db -sqlalchemy.testing.provision.follower_url_from_main -sqlalchemy.testing.provision.generate_driver_url -sqlalchemy.testing.provision.get_temp_table_name -sqlalchemy.testing.provision.post_configure_engine -sqlalchemy.testing.provision.prepare_for_drop_tables -sqlalchemy.testing.provision.run_reap_dbs -sqlalchemy.testing.provision.set_default_schema_on_connection -sqlalchemy.testing.provision.stop_test_class_outside_fixtures -sqlalchemy.testing.provision.temp_table_keyword_args -sqlalchemy.testing.provision.update_db_opts - # potentially replaced at runtime sqlalchemy.engine.Row.count sqlalchemy.engine.Row.index sqlalchemy.engine.row.Row.count sqlalchemy.engine.row.Row.index -# KeyError/AttributeError on import due to dynamic initialization from a different module -sqlalchemy.testing.fixtures -sqlalchemy.testing.pickleable -sqlalchemy.testing.plugin.bootstrap - -# Initialized to bool during __init__() -sqlalchemy.orm.Mapper.single -sqlalchemy.orm.mapper.Mapper.single - -# Dynamically added methods where the first argument is not named "self" -sqlalchemy.orm.Load.contains_eager -sqlalchemy.orm.Load.defaultload -sqlalchemy.orm.Load.defer -sqlalchemy.orm.Load.immediateload -sqlalchemy.orm.Load.joinedload -sqlalchemy.orm.Load.lazyload -sqlalchemy.orm.Load.load_only -sqlalchemy.orm.Load.noload -sqlalchemy.orm.Load.raiseload -sqlalchemy.orm.Load.selectin_polymorphic -sqlalchemy.orm.Load.selectinload -sqlalchemy.orm.Load.subqueryload -sqlalchemy.orm.Load.undefer -sqlalchemy.orm.Load.undefer_group -sqlalchemy.orm.Load.with_expression -sqlalchemy.orm.strategy_options.Load.contains_eager -sqlalchemy.orm.strategy_options.Load.defaultload -sqlalchemy.orm.strategy_options.Load.defer -sqlalchemy.orm.strategy_options.Load.immediateload -sqlalchemy.orm.strategy_options.Load.joinedload -sqlalchemy.orm.strategy_options.Load.lazyload -sqlalchemy.orm.strategy_options.Load.load_only -sqlalchemy.orm.strategy_options.Load.noload -sqlalchemy.orm.strategy_options.Load.raiseload -sqlalchemy.orm.strategy_options.Load.selectin_polymorphic -sqlalchemy.orm.strategy_options.Load.selectinload -sqlalchemy.orm.strategy_options.Load.subqueryload -sqlalchemy.orm.strategy_options.Load.undefer -sqlalchemy.orm.strategy_options.Load.undefer_group -sqlalchemy.orm.strategy_options.Load.with_expression - # abstract fields not present at runtime sqlalchemy.engine.Transaction.connection sqlalchemy.engine.Transaction.is_active sqlalchemy.engine.base.Transaction.connection sqlalchemy.engine.base.Transaction.is_active -# initialized to None during class construction, but overridden during __init__() -sqlalchemy.engine.Connection.engine +# initialized to None during class construction, but overridden during __init__() or __new__() sqlalchemy.engine.base.Connection.engine +sqlalchemy.engine.Connection.engine +sqlalchemy.orm.Mapper.single +sqlalchemy.orm.mapper.Mapper.single # uses @memoized_property at runtime, but we use @property for compatibility sqlalchemy.engine.URL.normalized_query @@ -132,1067 +41,29 @@ sqlalchemy.sql.annotation.Annotated.__new__ # as having conflicting __new__/__init__ methods sqlalchemy.orm.unitofwork.PostSortRec.__new__ -# unclear problems +# KeyError/AttributeError on import due to dynamic initialization from a different module +sqlalchemy.testing.fixtures +sqlalchemy.testing.pickleable +sqlalchemy.testing.plugin.bootstrap + +# method arguments starting with double underscores in the implementation trips up stubtest +sqlalchemy.testing.resolve_lambda +sqlalchemy.testing.util.resolve_lambda +sqlalchemy.orm.collections.MappedCollection.update + +# stubtest thinks __slots__ are always members +# https://github.com/python/mypy/issues/13906 sqlalchemy.sql.elements.quoted_name.lower sqlalchemy.sql.elements.quoted_name.upper sqlalchemy.sql.expression.quoted_name.lower sqlalchemy.sql.expression.quoted_name.upper sqlalchemy.sql.quoted_name.lower sqlalchemy.sql.quoted_name.upper -sqlalchemy.util.callable - -sqlalchemy.dialects.mssql.base.MSExecutionContext.get_result_cursor_strategy -sqlalchemy.dialects.postgresql.base.PGDDLCompiler.visit_foreign_key_constraint -sqlalchemy.engine.ExecutionContext.get_result_cursor_strategy -sqlalchemy.engine.interfaces.ExecutionContext.get_result_cursor_strategy sqlalchemy.orm.ColumnProperty.Comparator.__clause_element__ sqlalchemy.orm.properties.ColumnProperty.Comparator.__clause_element__ -# Metaclass differs: -sqlalchemy.ARRAY -sqlalchemy.BIGINT -sqlalchemy.BINARY -sqlalchemy.BLOB -sqlalchemy.BOOLEAN -sqlalchemy.BigInteger -sqlalchemy.Boolean -sqlalchemy.CHAR -sqlalchemy.CLOB -sqlalchemy.CheckConstraint -sqlalchemy.Column -sqlalchemy.ColumnDefault -sqlalchemy.Computed -sqlalchemy.Constraint -sqlalchemy.DATE -sqlalchemy.DATETIME -sqlalchemy.DDL -sqlalchemy.DECIMAL -sqlalchemy.Date -sqlalchemy.DateTime -sqlalchemy.Enum -sqlalchemy.FLOAT -sqlalchemy.Float -sqlalchemy.ForeignKey -sqlalchemy.ForeignKeyConstraint -sqlalchemy.INTEGER -sqlalchemy.Identity -sqlalchemy.Index -sqlalchemy.Integer -sqlalchemy.Interval -sqlalchemy.JSON -sqlalchemy.JSON.JSONElementType -sqlalchemy.JSON.JSONIndexType -sqlalchemy.JSON.JSONIntIndexType -sqlalchemy.JSON.JSONPathType -sqlalchemy.JSON.JSONStrIndexType -sqlalchemy.LargeBinary -sqlalchemy.MetaData -sqlalchemy.NCHAR -sqlalchemy.NUMERIC -sqlalchemy.NVARCHAR -sqlalchemy.Numeric -sqlalchemy.PickleType -sqlalchemy.PrimaryKeyConstraint -sqlalchemy.REAL -sqlalchemy.SMALLINT -sqlalchemy.Sequence -sqlalchemy.SmallInteger -sqlalchemy.String -sqlalchemy.TEXT -sqlalchemy.TIME -sqlalchemy.TIMESTAMP -sqlalchemy.Table -sqlalchemy.Text -sqlalchemy.ThreadLocalMetaData -sqlalchemy.Time -sqlalchemy.TupleType -sqlalchemy.TypeDecorator -sqlalchemy.Unicode -sqlalchemy.UnicodeText -sqlalchemy.UniqueConstraint -sqlalchemy.VARBINARY -sqlalchemy.VARCHAR -sqlalchemy.dialects.firebird.BIGINT -sqlalchemy.dialects.firebird.BLOB -sqlalchemy.dialects.firebird.CHAR -sqlalchemy.dialects.firebird.DATE -sqlalchemy.dialects.firebird.FLOAT -sqlalchemy.dialects.firebird.NUMERIC -sqlalchemy.dialects.firebird.SMALLINT -sqlalchemy.dialects.firebird.TEXT -sqlalchemy.dialects.firebird.TIME -sqlalchemy.dialects.firebird.TIMESTAMP -sqlalchemy.dialects.firebird.VARCHAR -sqlalchemy.dialects.firebird.base.BIGINT -sqlalchemy.dialects.firebird.base.BLOB -sqlalchemy.dialects.firebird.base.CHAR -sqlalchemy.dialects.firebird.base.DATE -sqlalchemy.dialects.firebird.base.FBTypeCompiler -sqlalchemy.dialects.firebird.base.FLOAT -sqlalchemy.dialects.firebird.base.INTEGER -sqlalchemy.dialects.firebird.base.Integer -sqlalchemy.dialects.firebird.base.NUMERIC -sqlalchemy.dialects.firebird.base.SMALLINT -sqlalchemy.dialects.firebird.base.TEXT -sqlalchemy.dialects.firebird.base.TIME -sqlalchemy.dialects.firebird.base.TIMESTAMP -sqlalchemy.dialects.firebird.base.VARCHAR -sqlalchemy.dialects.firebird.base._FBDateTime -sqlalchemy.dialects.firebird.base._StringType -sqlalchemy.dialects.firebird.kinterbasdb._FBFloat_kinterbasdb -sqlalchemy.dialects.firebird.kinterbasdb._FBNumeric_kinterbasdb -sqlalchemy.dialects.mssql.BIGINT -sqlalchemy.dialects.mssql.BINARY -sqlalchemy.dialects.mssql.BIT -sqlalchemy.dialects.mssql.CHAR -sqlalchemy.dialects.mssql.DATE -sqlalchemy.dialects.mssql.DATETIME -sqlalchemy.dialects.mssql.DATETIME2 -sqlalchemy.dialects.mssql.DATETIMEOFFSET -sqlalchemy.dialects.mssql.DECIMAL -sqlalchemy.dialects.mssql.FLOAT -sqlalchemy.dialects.mssql.IMAGE -sqlalchemy.dialects.mssql.INTEGER -sqlalchemy.dialects.mssql.JSON -sqlalchemy.dialects.mssql.MONEY -sqlalchemy.dialects.mssql.NCHAR -sqlalchemy.dialects.mssql.NTEXT -sqlalchemy.dialects.mssql.NUMERIC -sqlalchemy.dialects.mssql.NVARCHAR -sqlalchemy.dialects.mssql.REAL -sqlalchemy.dialects.mssql.ROWVERSION -sqlalchemy.dialects.mssql.SMALLDATETIME -sqlalchemy.dialects.mssql.SMALLINT -sqlalchemy.dialects.mssql.SMALLMONEY -sqlalchemy.dialects.mssql.SQL_VARIANT -sqlalchemy.dialects.mssql.TEXT -sqlalchemy.dialects.mssql.TIME -sqlalchemy.dialects.mssql.TIMESTAMP -sqlalchemy.dialects.mssql.TINYINT -sqlalchemy.dialects.mssql.UNIQUEIDENTIFIER -sqlalchemy.dialects.mssql.VARBINARY -sqlalchemy.dialects.mssql.VARCHAR -sqlalchemy.dialects.mssql.XML -sqlalchemy.dialects.mssql.base.BIGINT -sqlalchemy.dialects.mssql.base.BINARY -sqlalchemy.dialects.mssql.base.BIT -sqlalchemy.dialects.mssql.base.CHAR -sqlalchemy.dialects.mssql.base.DATE -sqlalchemy.dialects.mssql.base.DATETIME -sqlalchemy.dialects.mssql.base.DATETIME2 -sqlalchemy.dialects.mssql.base.DATETIMEOFFSET -sqlalchemy.dialects.mssql.base.DECIMAL -sqlalchemy.dialects.mssql.base.FLOAT -sqlalchemy.dialects.mssql.base.IMAGE -sqlalchemy.dialects.mssql.base.INTEGER -sqlalchemy.dialects.mssql.base.JSON -sqlalchemy.dialects.mssql.base.MONEY -sqlalchemy.dialects.mssql.base.MSTypeCompiler -sqlalchemy.dialects.mssql.base.NCHAR -sqlalchemy.dialects.mssql.base.NTEXT -sqlalchemy.dialects.mssql.base.NUMERIC -sqlalchemy.dialects.mssql.base.NVARCHAR -sqlalchemy.dialects.mssql.base.REAL -sqlalchemy.dialects.mssql.base.ROWVERSION -sqlalchemy.dialects.mssql.base.SMALLDATETIME -sqlalchemy.dialects.mssql.base.SMALLINT -sqlalchemy.dialects.mssql.base.SMALLMONEY -sqlalchemy.dialects.mssql.base.SQL_VARIANT -sqlalchemy.dialects.mssql.base.TEXT -sqlalchemy.dialects.mssql.base.TIME -sqlalchemy.dialects.mssql.base.TIMESTAMP -sqlalchemy.dialects.mssql.base.TINYINT -sqlalchemy.dialects.mssql.base.TryCast -sqlalchemy.dialects.mssql.base.UNIQUEIDENTIFIER -sqlalchemy.dialects.mssql.base.VARBINARY -sqlalchemy.dialects.mssql.base.VARCHAR -sqlalchemy.dialects.mssql.base.XML -sqlalchemy.dialects.mssql.base._BASETIMEIMPL -sqlalchemy.dialects.mssql.base._MSDate -sqlalchemy.dialects.mssql.base._MSDateTime -sqlalchemy.dialects.mssql.base._MSUnicode -sqlalchemy.dialects.mssql.base._MSUnicodeText -sqlalchemy.dialects.mssql.information_schema.CoerceUnicode -sqlalchemy.dialects.mssql.information_schema.IdentitySqlVariant -sqlalchemy.dialects.mssql.information_schema._cast_on_2005 -sqlalchemy.dialects.mssql.json.JSON -sqlalchemy.dialects.mssql.json.JSONIndexType -sqlalchemy.dialects.mssql.json.JSONPathType -sqlalchemy.dialects.mssql.mxodbc._MSDate_mxodbc -sqlalchemy.dialects.mssql.mxodbc._MSNumeric_mxodbc -sqlalchemy.dialects.mssql.mxodbc._MSTime_mxodbc -sqlalchemy.dialects.mssql.mxodbc._VARBINARY_mxodbc -sqlalchemy.dialects.mssql.pymssql._MSNumeric_pymssql -sqlalchemy.dialects.mssql.pyodbc._BINARY_pyodbc -sqlalchemy.dialects.mssql.pyodbc._MSFloat_pyodbc -sqlalchemy.dialects.mssql.pyodbc._MSNumeric_pyodbc -sqlalchemy.dialects.mssql.pyodbc._ODBCDATETIMEOFFSET -sqlalchemy.dialects.mssql.pyodbc._ODBCDateTime -sqlalchemy.dialects.mssql.pyodbc._VARBINARY_pyodbc -sqlalchemy.dialects.mysql.BIGINT -sqlalchemy.dialects.mysql.BINARY -sqlalchemy.dialects.mysql.BIT -sqlalchemy.dialects.mysql.BLOB -sqlalchemy.dialects.mysql.BOOLEAN -sqlalchemy.dialects.mysql.CHAR -sqlalchemy.dialects.mysql.DATE -sqlalchemy.dialects.mysql.DATETIME -sqlalchemy.dialects.mysql.DECIMAL -sqlalchemy.dialects.mysql.DOUBLE -sqlalchemy.dialects.mysql.ENUM -sqlalchemy.dialects.mysql.FLOAT -sqlalchemy.dialects.mysql.INTEGER -sqlalchemy.dialects.mysql.Insert -sqlalchemy.dialects.mysql.JSON -sqlalchemy.dialects.mysql.LONGBLOB -sqlalchemy.dialects.mysql.LONGTEXT -sqlalchemy.dialects.mysql.MEDIUMBLOB -sqlalchemy.dialects.mysql.MEDIUMINT -sqlalchemy.dialects.mysql.MEDIUMTEXT -sqlalchemy.dialects.mysql.NCHAR -sqlalchemy.dialects.mysql.NUMERIC -sqlalchemy.dialects.mysql.NVARCHAR -sqlalchemy.dialects.mysql.REAL -sqlalchemy.dialects.mysql.SET -sqlalchemy.dialects.mysql.SMALLINT -sqlalchemy.dialects.mysql.TEXT -sqlalchemy.dialects.mysql.TIME -sqlalchemy.dialects.mysql.TIMESTAMP -sqlalchemy.dialects.mysql.TINYBLOB -sqlalchemy.dialects.mysql.TINYINT -sqlalchemy.dialects.mysql.TINYTEXT -sqlalchemy.dialects.mysql.VARBINARY -sqlalchemy.dialects.mysql.VARCHAR -sqlalchemy.dialects.mysql.YEAR -sqlalchemy.dialects.mysql.base.BIGINT -sqlalchemy.dialects.mysql.base.BINARY -sqlalchemy.dialects.mysql.base.BIT -sqlalchemy.dialects.mysql.base.BLOB -sqlalchemy.dialects.mysql.base.BOOLEAN -sqlalchemy.dialects.mysql.base.CHAR -sqlalchemy.dialects.mysql.base.DATE -sqlalchemy.dialects.mysql.base.DATETIME -sqlalchemy.dialects.mysql.base.DECIMAL -sqlalchemy.dialects.mysql.base.DOUBLE -sqlalchemy.dialects.mysql.base.ENUM -sqlalchemy.dialects.mysql.base.FLOAT -sqlalchemy.dialects.mysql.base.INTEGER -sqlalchemy.dialects.mysql.base.JSON -sqlalchemy.dialects.mysql.base.LONGBLOB -sqlalchemy.dialects.mysql.base.LONGTEXT -sqlalchemy.dialects.mysql.base.MEDIUMBLOB -sqlalchemy.dialects.mysql.base.MEDIUMINT -sqlalchemy.dialects.mysql.base.MEDIUMTEXT -sqlalchemy.dialects.mysql.base.MySQLTypeCompiler -sqlalchemy.dialects.mysql.base.NCHAR -sqlalchemy.dialects.mysql.base.NUMERIC -sqlalchemy.dialects.mysql.base.NVARCHAR -sqlalchemy.dialects.mysql.base.REAL -sqlalchemy.dialects.mysql.base.SET -sqlalchemy.dialects.mysql.base.SMALLINT -sqlalchemy.dialects.mysql.base.TEXT -sqlalchemy.dialects.mysql.base.TIME -sqlalchemy.dialects.mysql.base.TIMESTAMP -sqlalchemy.dialects.mysql.base.TINYBLOB -sqlalchemy.dialects.mysql.base.TINYINT -sqlalchemy.dialects.mysql.base.TINYTEXT -sqlalchemy.dialects.mysql.base.VARBINARY -sqlalchemy.dialects.mysql.base.VARCHAR -sqlalchemy.dialects.mysql.base.YEAR -sqlalchemy.dialects.mysql.cymysql._cymysqlBIT -sqlalchemy.dialects.mysql.dml.Insert -sqlalchemy.dialects.mysql.dml.OnDuplicateClause -sqlalchemy.dialects.mysql.enumerated.ENUM -sqlalchemy.dialects.mysql.enumerated.SET -sqlalchemy.dialects.mysql.expression.match -sqlalchemy.dialects.mysql.json.JSON -sqlalchemy.dialects.mysql.json.JSONIndexType -sqlalchemy.dialects.mysql.json.JSONPathType -sqlalchemy.dialects.mysql.match -sqlalchemy.dialects.mysql.mysqlconnector._myconnpyBIT -sqlalchemy.dialects.mysql.oursql._oursqlBIT -sqlalchemy.dialects.mysql.pyodbc._pyodbcTIME -sqlalchemy.dialects.mysql.types.BIGINT -sqlalchemy.dialects.mysql.types.BIT -sqlalchemy.dialects.mysql.types.CHAR -sqlalchemy.dialects.mysql.types.DATETIME -sqlalchemy.dialects.mysql.types.DECIMAL -sqlalchemy.dialects.mysql.types.DOUBLE -sqlalchemy.dialects.mysql.types.FLOAT -sqlalchemy.dialects.mysql.types.INTEGER -sqlalchemy.dialects.mysql.types.LONGBLOB -sqlalchemy.dialects.mysql.types.LONGTEXT -sqlalchemy.dialects.mysql.types.MEDIUMBLOB -sqlalchemy.dialects.mysql.types.MEDIUMINT -sqlalchemy.dialects.mysql.types.MEDIUMTEXT -sqlalchemy.dialects.mysql.types.NCHAR -sqlalchemy.dialects.mysql.types.NUMERIC -sqlalchemy.dialects.mysql.types.NVARCHAR -sqlalchemy.dialects.mysql.types.REAL -sqlalchemy.dialects.mysql.types.SMALLINT -sqlalchemy.dialects.mysql.types.TEXT -sqlalchemy.dialects.mysql.types.TIME -sqlalchemy.dialects.mysql.types.TIMESTAMP -sqlalchemy.dialects.mysql.types.TINYBLOB -sqlalchemy.dialects.mysql.types.TINYINT -sqlalchemy.dialects.mysql.types.TINYTEXT -sqlalchemy.dialects.mysql.types.VARCHAR -sqlalchemy.dialects.mysql.types.YEAR -sqlalchemy.dialects.mysql.types._FloatType -sqlalchemy.dialects.mysql.types._IntegerType -sqlalchemy.dialects.mysql.types._MatchType -sqlalchemy.dialects.mysql.types._StringType -sqlalchemy.dialects.oracle.BFILE -sqlalchemy.dialects.oracle.BINARY_DOUBLE -sqlalchemy.dialects.oracle.BINARY_FLOAT -sqlalchemy.dialects.oracle.BLOB -sqlalchemy.dialects.oracle.CHAR -sqlalchemy.dialects.oracle.CLOB -sqlalchemy.dialects.oracle.DATE -sqlalchemy.dialects.oracle.DOUBLE_PRECISION -sqlalchemy.dialects.oracle.FLOAT -sqlalchemy.dialects.oracle.INTERVAL -sqlalchemy.dialects.oracle.LONG -sqlalchemy.dialects.oracle.NCHAR -sqlalchemy.dialects.oracle.NCLOB -sqlalchemy.dialects.oracle.NUMBER -sqlalchemy.dialects.oracle.NVARCHAR -sqlalchemy.dialects.oracle.RAW -sqlalchemy.dialects.oracle.ROWID -sqlalchemy.dialects.oracle.TIMESTAMP -sqlalchemy.dialects.oracle.VARCHAR -sqlalchemy.dialects.oracle.VARCHAR2 -sqlalchemy.dialects.oracle.base.BFILE -sqlalchemy.dialects.oracle.base.BINARY_DOUBLE -sqlalchemy.dialects.oracle.base.BINARY_FLOAT -sqlalchemy.dialects.oracle.base.BLOB -sqlalchemy.dialects.oracle.base.CHAR -sqlalchemy.dialects.oracle.base.CLOB -sqlalchemy.dialects.oracle.base.DATE -sqlalchemy.dialects.oracle.base.DOUBLE_PRECISION -sqlalchemy.dialects.oracle.base.FLOAT -sqlalchemy.dialects.oracle.base.INTEGER -sqlalchemy.dialects.oracle.base.INTERVAL -sqlalchemy.dialects.oracle.base.LONG -sqlalchemy.dialects.oracle.base.NCHAR -sqlalchemy.dialects.oracle.base.NCLOB -sqlalchemy.dialects.oracle.base.NUMBER -sqlalchemy.dialects.oracle.base.NVARCHAR -sqlalchemy.dialects.oracle.base.OracleTypeCompiler -sqlalchemy.dialects.oracle.base.RAW -sqlalchemy.dialects.oracle.base.ROWID -sqlalchemy.dialects.oracle.base.TIMESTAMP -sqlalchemy.dialects.oracle.base.VARCHAR -sqlalchemy.dialects.oracle.base.VARCHAR2 -sqlalchemy.dialects.oracle.base._OracleBoolean -sqlalchemy.dialects.oracle.base._OuterJoinColumn -sqlalchemy.dialects.oracle.cx_oracle._OracleBINARY_DOUBLE -sqlalchemy.dialects.oracle.cx_oracle._OracleBINARY_FLOAT -sqlalchemy.dialects.oracle.cx_oracle._OracleBinary -sqlalchemy.dialects.oracle.cx_oracle._OracleBinaryFloat -sqlalchemy.dialects.oracle.cx_oracle._OracleChar -sqlalchemy.dialects.oracle.cx_oracle._OracleDate -sqlalchemy.dialects.oracle.cx_oracle._OracleEnum -sqlalchemy.dialects.oracle.cx_oracle._OracleInteger -sqlalchemy.dialects.oracle.cx_oracle._OracleInterval -sqlalchemy.dialects.oracle.cx_oracle._OracleLong -sqlalchemy.dialects.oracle.cx_oracle._OracleNChar -sqlalchemy.dialects.oracle.cx_oracle._OracleNUMBER -sqlalchemy.dialects.oracle.cx_oracle._OracleNumeric -sqlalchemy.dialects.oracle.cx_oracle._OracleRaw -sqlalchemy.dialects.oracle.cx_oracle._OracleRowid -sqlalchemy.dialects.oracle.cx_oracle._OracleString -sqlalchemy.dialects.oracle.cx_oracle._OracleText -sqlalchemy.dialects.oracle.cx_oracle._OracleUnicodeStringCHAR -sqlalchemy.dialects.oracle.cx_oracle._OracleUnicodeStringNCHAR -sqlalchemy.dialects.oracle.cx_oracle._OracleUnicodeTextCLOB -sqlalchemy.dialects.oracle.cx_oracle._OracleUnicodeTextNCLOB -sqlalchemy.dialects.postgresql.ARRAY -sqlalchemy.dialects.postgresql.BIGINT -sqlalchemy.dialects.postgresql.BIT -sqlalchemy.dialects.postgresql.BOOLEAN -sqlalchemy.dialects.postgresql.BYTEA -sqlalchemy.dialects.postgresql.CHAR -sqlalchemy.dialects.postgresql.CIDR -sqlalchemy.dialects.postgresql.CreateEnumType -sqlalchemy.dialects.postgresql.DATE -sqlalchemy.dialects.postgresql.DATERANGE -sqlalchemy.dialects.postgresql.DOUBLE_PRECISION -sqlalchemy.dialects.postgresql.DropEnumType -sqlalchemy.dialects.postgresql.ENUM -sqlalchemy.dialects.postgresql.ExcludeConstraint -sqlalchemy.dialects.postgresql.FLOAT -sqlalchemy.dialects.postgresql.HSTORE -sqlalchemy.dialects.postgresql.INET -sqlalchemy.dialects.postgresql.INT4RANGE -sqlalchemy.dialects.postgresql.INT8RANGE -sqlalchemy.dialects.postgresql.INTEGER -sqlalchemy.dialects.postgresql.INTERVAL -sqlalchemy.dialects.postgresql.Insert -sqlalchemy.dialects.postgresql.JSON -sqlalchemy.dialects.postgresql.JSONB -sqlalchemy.dialects.postgresql.MACADDR -sqlalchemy.dialects.postgresql.MACADDR8 -sqlalchemy.dialects.postgresql.MONEY -sqlalchemy.dialects.postgresql.NUMERIC -sqlalchemy.dialects.postgresql.NUMRANGE -sqlalchemy.dialects.postgresql.OID -sqlalchemy.dialects.postgresql.REAL -sqlalchemy.dialects.postgresql.REGCLASS -sqlalchemy.dialects.postgresql.SMALLINT -sqlalchemy.dialects.postgresql.TEXT -sqlalchemy.dialects.postgresql.TIME -sqlalchemy.dialects.postgresql.TIMESTAMP -sqlalchemy.dialects.postgresql.TSRANGE -sqlalchemy.dialects.postgresql.TSTZRANGE -sqlalchemy.dialects.postgresql.TSVECTOR -sqlalchemy.dialects.postgresql.UUID -sqlalchemy.dialects.postgresql.VARCHAR -sqlalchemy.dialects.postgresql.aggregate_order_by -sqlalchemy.dialects.postgresql.array -sqlalchemy.dialects.postgresql.array.ARRAY -sqlalchemy.dialects.postgresql.array.array -sqlalchemy.dialects.postgresql.asyncpg.AsyncPgEnum -sqlalchemy.dialects.postgresql.asyncpg.AsyncPgInterval -sqlalchemy.dialects.postgresql.asyncpg.AsyncpgBigInteger -sqlalchemy.dialects.postgresql.asyncpg.AsyncpgBoolean -sqlalchemy.dialects.postgresql.asyncpg.AsyncpgDate -sqlalchemy.dialects.postgresql.asyncpg.AsyncpgDateTime -sqlalchemy.dialects.postgresql.asyncpg.AsyncpgFloat -sqlalchemy.dialects.postgresql.asyncpg.AsyncpgInteger -sqlalchemy.dialects.postgresql.asyncpg.AsyncpgJSON -sqlalchemy.dialects.postgresql.asyncpg.AsyncpgJSONB -sqlalchemy.dialects.postgresql.asyncpg.AsyncpgJSONIndexType -sqlalchemy.dialects.postgresql.asyncpg.AsyncpgJSONIntIndexType -sqlalchemy.dialects.postgresql.asyncpg.AsyncpgJSONPathType -sqlalchemy.dialects.postgresql.asyncpg.AsyncpgJSONStrIndexType -sqlalchemy.dialects.postgresql.asyncpg.AsyncpgNumeric -sqlalchemy.dialects.postgresql.asyncpg.AsyncpgOID -sqlalchemy.dialects.postgresql.asyncpg.AsyncpgREGCLASS -sqlalchemy.dialects.postgresql.asyncpg.AsyncpgTime -sqlalchemy.dialects.postgresql.asyncpg.AsyncpgUUID -sqlalchemy.dialects.postgresql.base.BIGINT -sqlalchemy.dialects.postgresql.base.BIT -sqlalchemy.dialects.postgresql.base.BOOLEAN -sqlalchemy.dialects.postgresql.base.BYTEA -sqlalchemy.dialects.postgresql.base.CHAR -sqlalchemy.dialects.postgresql.base.CIDR -sqlalchemy.dialects.postgresql.base.CreateEnumType -sqlalchemy.dialects.postgresql.base.DATE -sqlalchemy.dialects.postgresql.base.DOUBLE_PRECISION -sqlalchemy.dialects.postgresql.base.DropEnumType -sqlalchemy.dialects.postgresql.base.ENUM -sqlalchemy.dialects.postgresql.base.FLOAT -sqlalchemy.dialects.postgresql.base.INET -sqlalchemy.dialects.postgresql.base.INTEGER -sqlalchemy.dialects.postgresql.base.INTERVAL -sqlalchemy.dialects.postgresql.base.MACADDR -sqlalchemy.dialects.postgresql.base.MACADDR8 -sqlalchemy.dialects.postgresql.base.MONEY -sqlalchemy.dialects.postgresql.base.NUMERIC -sqlalchemy.dialects.postgresql.base.OID -sqlalchemy.dialects.postgresql.base.PGTypeCompiler -sqlalchemy.dialects.postgresql.base.REAL -sqlalchemy.dialects.postgresql.base.REGCLASS -sqlalchemy.dialects.postgresql.base.SMALLINT -sqlalchemy.dialects.postgresql.base.TEXT -sqlalchemy.dialects.postgresql.base.TIME -sqlalchemy.dialects.postgresql.base.TIMESTAMP -sqlalchemy.dialects.postgresql.base.TSVECTOR -sqlalchemy.dialects.postgresql.base.UUID -sqlalchemy.dialects.postgresql.base.VARCHAR -sqlalchemy.dialects.postgresql.base._ColonCast -sqlalchemy.dialects.postgresql.dml.Insert -sqlalchemy.dialects.postgresql.dml.OnConflictClause -sqlalchemy.dialects.postgresql.dml.OnConflictDoNothing -sqlalchemy.dialects.postgresql.dml.OnConflictDoUpdate -sqlalchemy.dialects.postgresql.ext.ExcludeConstraint -sqlalchemy.dialects.postgresql.ext.aggregate_order_by -sqlalchemy.dialects.postgresql.hstore -sqlalchemy.dialects.postgresql.hstore.HSTORE -sqlalchemy.dialects.postgresql.hstore._HStoreArrayFunction -sqlalchemy.dialects.postgresql.hstore._HStoreDefinedFunction -sqlalchemy.dialects.postgresql.hstore._HStoreDeleteFunction -sqlalchemy.dialects.postgresql.hstore._HStoreKeysFunction -sqlalchemy.dialects.postgresql.hstore._HStoreMatrixFunction -sqlalchemy.dialects.postgresql.hstore._HStoreSliceFunction -sqlalchemy.dialects.postgresql.hstore._HStoreValsFunction -sqlalchemy.dialects.postgresql.hstore.hstore -sqlalchemy.dialects.postgresql.json.JSON -sqlalchemy.dialects.postgresql.json.JSONB -sqlalchemy.dialects.postgresql.json.JSONPathType -sqlalchemy.dialects.postgresql.pg8000._PGARRAY -sqlalchemy.dialects.postgresql.pg8000._PGBigInteger -sqlalchemy.dialects.postgresql.pg8000._PGBoolean -sqlalchemy.dialects.postgresql.pg8000._PGEnum -sqlalchemy.dialects.postgresql.pg8000._PGInteger -sqlalchemy.dialects.postgresql.pg8000._PGInterval -sqlalchemy.dialects.postgresql.pg8000._PGJSON -sqlalchemy.dialects.postgresql.pg8000._PGJSONB -sqlalchemy.dialects.postgresql.pg8000._PGJSONIndexType -sqlalchemy.dialects.postgresql.pg8000._PGJSONIntIndexType -sqlalchemy.dialects.postgresql.pg8000._PGJSONPathType -sqlalchemy.dialects.postgresql.pg8000._PGJSONStrIndexType -sqlalchemy.dialects.postgresql.pg8000._PGNullType -sqlalchemy.dialects.postgresql.pg8000._PGNumeric -sqlalchemy.dialects.postgresql.pg8000._PGNumericNoBind -sqlalchemy.dialects.postgresql.pg8000._PGSmallInteger -sqlalchemy.dialects.postgresql.pg8000._PGTime -sqlalchemy.dialects.postgresql.pg8000._PGTimeStamp -sqlalchemy.dialects.postgresql.pg8000._PGUUID -sqlalchemy.dialects.postgresql.psycopg2._PGARRAY -sqlalchemy.dialects.postgresql.psycopg2._PGEnum -sqlalchemy.dialects.postgresql.psycopg2._PGHStore -sqlalchemy.dialects.postgresql.psycopg2._PGJSON -sqlalchemy.dialects.postgresql.psycopg2._PGJSONB -sqlalchemy.dialects.postgresql.psycopg2._PGNumeric -sqlalchemy.dialects.postgresql.psycopg2._PGUUID -sqlalchemy.dialects.postgresql.pygresql._PGHStore -sqlalchemy.dialects.postgresql.pygresql._PGJSON -sqlalchemy.dialects.postgresql.pygresql._PGJSONB -sqlalchemy.dialects.postgresql.pygresql._PGNumeric -sqlalchemy.dialects.postgresql.pygresql._PGUUID -sqlalchemy.dialects.postgresql.pypostgresql.PGNumeric -sqlalchemy.dialects.postgresql.ranges.DATERANGE -sqlalchemy.dialects.postgresql.ranges.INT4RANGE -sqlalchemy.dialects.postgresql.ranges.INT8RANGE -sqlalchemy.dialects.postgresql.ranges.NUMRANGE -sqlalchemy.dialects.postgresql.ranges.TSRANGE -sqlalchemy.dialects.postgresql.ranges.TSTZRANGE -sqlalchemy.dialects.sqlite.BLOB -sqlalchemy.dialects.sqlite.BOOLEAN -sqlalchemy.dialects.sqlite.CHAR -sqlalchemy.dialects.sqlite.DATE -sqlalchemy.dialects.sqlite.DATETIME -sqlalchemy.dialects.sqlite.DECIMAL -sqlalchemy.dialects.sqlite.FLOAT -sqlalchemy.dialects.sqlite.INTEGER -sqlalchemy.dialects.sqlite.Insert -sqlalchemy.dialects.sqlite.JSON -sqlalchemy.dialects.sqlite.NUMERIC -sqlalchemy.dialects.sqlite.REAL -sqlalchemy.dialects.sqlite.SMALLINT -sqlalchemy.dialects.sqlite.TEXT -sqlalchemy.dialects.sqlite.TIME -sqlalchemy.dialects.sqlite.TIMESTAMP -sqlalchemy.dialects.sqlite.VARCHAR -sqlalchemy.dialects.sqlite.base.BLOB -sqlalchemy.dialects.sqlite.base.BOOLEAN -sqlalchemy.dialects.sqlite.base.CHAR -sqlalchemy.dialects.sqlite.base.DATE -sqlalchemy.dialects.sqlite.base.DATETIME -sqlalchemy.dialects.sqlite.base.DECIMAL -sqlalchemy.dialects.sqlite.base.FLOAT -sqlalchemy.dialects.sqlite.base.INTEGER -sqlalchemy.dialects.sqlite.base.JSON -sqlalchemy.dialects.sqlite.base.NUMERIC -sqlalchemy.dialects.sqlite.base.REAL -sqlalchemy.dialects.sqlite.base.SMALLINT -sqlalchemy.dialects.sqlite.base.SQLiteTypeCompiler -sqlalchemy.dialects.sqlite.base.TEXT -sqlalchemy.dialects.sqlite.base.TIME -sqlalchemy.dialects.sqlite.base.TIMESTAMP -sqlalchemy.dialects.sqlite.base.VARCHAR -sqlalchemy.dialects.sqlite.base._SQliteJson -sqlalchemy.dialects.sqlite.dml.Insert -sqlalchemy.dialects.sqlite.dml.OnConflictClause -sqlalchemy.dialects.sqlite.dml.OnConflictDoNothing -sqlalchemy.dialects.sqlite.dml.OnConflictDoUpdate -sqlalchemy.dialects.sqlite.json.JSON -sqlalchemy.dialects.sqlite.json.JSONIndexType -sqlalchemy.dialects.sqlite.json.JSONPathType -sqlalchemy.dialects.sqlite.pysqlite._SQLite_pysqliteDate -sqlalchemy.dialects.sqlite.pysqlite._SQLite_pysqliteTimeStamp -sqlalchemy.dialects.sybase.BIGINT -sqlalchemy.dialects.sybase.BINARY -sqlalchemy.dialects.sybase.BIT -sqlalchemy.dialects.sybase.CHAR -sqlalchemy.dialects.sybase.DATE -sqlalchemy.dialects.sybase.DATETIME -sqlalchemy.dialects.sybase.FLOAT -sqlalchemy.dialects.sybase.IMAGE -sqlalchemy.dialects.sybase.INTEGER -sqlalchemy.dialects.sybase.MONEY -sqlalchemy.dialects.sybase.NCHAR -sqlalchemy.dialects.sybase.NUMERIC -sqlalchemy.dialects.sybase.NVARCHAR -sqlalchemy.dialects.sybase.SMALLINT -sqlalchemy.dialects.sybase.SMALLMONEY -sqlalchemy.dialects.sybase.TEXT -sqlalchemy.dialects.sybase.TIME -sqlalchemy.dialects.sybase.TINYINT -sqlalchemy.dialects.sybase.UNICHAR -sqlalchemy.dialects.sybase.UNITEXT -sqlalchemy.dialects.sybase.UNIVARCHAR -sqlalchemy.dialects.sybase.VARBINARY -sqlalchemy.dialects.sybase.VARCHAR -sqlalchemy.dialects.sybase.base.BIGINT -sqlalchemy.dialects.sybase.base.BINARY -sqlalchemy.dialects.sybase.base.BIT -sqlalchemy.dialects.sybase.base.CHAR -sqlalchemy.dialects.sybase.base.DATE -sqlalchemy.dialects.sybase.base.DATETIME -sqlalchemy.dialects.sybase.base.DECIMAL -sqlalchemy.dialects.sybase.base.FLOAT -sqlalchemy.dialects.sybase.base.IMAGE -sqlalchemy.dialects.sybase.base.INTEGER -sqlalchemy.dialects.sybase.base.MONEY -sqlalchemy.dialects.sybase.base.NCHAR -sqlalchemy.dialects.sybase.base.NUMERIC -sqlalchemy.dialects.sybase.base.NVARCHAR -sqlalchemy.dialects.sybase.base.REAL -sqlalchemy.dialects.sybase.base.SMALLINT -sqlalchemy.dialects.sybase.base.SMALLMONEY -sqlalchemy.dialects.sybase.base.SybaseTypeCompiler -sqlalchemy.dialects.sybase.base.TEXT -sqlalchemy.dialects.sybase.base.TIME -sqlalchemy.dialects.sybase.base.TIMESTAMP -sqlalchemy.dialects.sybase.base.TINYINT -sqlalchemy.dialects.sybase.base.UNICHAR -sqlalchemy.dialects.sybase.base.UNIQUEIDENTIFIER -sqlalchemy.dialects.sybase.base.UNITEXT -sqlalchemy.dialects.sybase.base.UNIVARCHAR -sqlalchemy.dialects.sybase.base.Unicode -sqlalchemy.dialects.sybase.base.VARBINARY -sqlalchemy.dialects.sybase.base.VARCHAR -sqlalchemy.dialects.sybase.pyodbc._SybNumeric_pyodbc -sqlalchemy.dialects.sybase.pysybase._SybNumeric -sqlalchemy.engine.TypeCompiler -sqlalchemy.engine.default._StrDate -sqlalchemy.engine.default._StrDateTime -sqlalchemy.engine.default._StrTime -sqlalchemy.engine.events.ConnectionEvents -sqlalchemy.engine.events.DialectEvents -sqlalchemy.engine.interfaces.TypeCompiler -sqlalchemy.event.Events -sqlalchemy.event.base.Events -sqlalchemy.events.ConnectionEvents -sqlalchemy.events.DDLEvents -sqlalchemy.events.DialectEvents -sqlalchemy.events.PoolEvents -sqlalchemy.ext.asyncio.AsyncConnectionEvents -sqlalchemy.ext.asyncio.AsyncSessionEvents -sqlalchemy.ext.asyncio.events.AsyncConnectionEvents -sqlalchemy.ext.asyncio.events.AsyncSessionEvents -sqlalchemy.orm.AttributeEvents -sqlalchemy.orm.FromStatement -sqlalchemy.orm.InstanceEvents -sqlalchemy.orm.InstrumentationEvents -sqlalchemy.orm.MapperEvents -sqlalchemy.orm.QueryContext.default_load_options -sqlalchemy.orm.QueryEvents -sqlalchemy.orm.SessionEvents -sqlalchemy.orm.context.ORMCompileState.default_compile_options -sqlalchemy.orm.context.QueryContext.default_load_options -sqlalchemy.orm.events.AttributeEvents -sqlalchemy.orm.events.InstanceEvents -sqlalchemy.orm.events.InstrumentationEvents -sqlalchemy.orm.events.MapperEvents -sqlalchemy.orm.events.QueryEvents -sqlalchemy.orm.events.SessionEvents -sqlalchemy.orm.events._InstanceEventsHold.HoldInstanceEvents -sqlalchemy.orm.events._MapperEventsHold.HoldMapperEvents -sqlalchemy.orm.persistence.BulkUDCompileState.default_update_options -sqlalchemy.orm.query.FromStatement -sqlalchemy.orm.query.QueryContext.default_load_options -sqlalchemy.orm.util._ORMJoin -sqlalchemy.pool.events.PoolEvents -sqlalchemy.schema.AddConstraint -sqlalchemy.schema.CheckConstraint -sqlalchemy.schema.Column -sqlalchemy.schema.ColumnCollectionConstraint -sqlalchemy.schema.ColumnDefault -sqlalchemy.schema.Computed -sqlalchemy.schema.Constraint -sqlalchemy.schema.CreateColumn -sqlalchemy.schema.CreateIndex -sqlalchemy.schema.CreateSchema -sqlalchemy.schema.CreateSequence -sqlalchemy.schema.CreateTable -sqlalchemy.schema.DDL -sqlalchemy.schema.DDLElement -sqlalchemy.schema.DefaultGenerator -sqlalchemy.schema.DropColumnComment -sqlalchemy.schema.DropConstraint -sqlalchemy.schema.DropIndex -sqlalchemy.schema.DropSchema -sqlalchemy.schema.DropSequence -sqlalchemy.schema.DropTable -sqlalchemy.schema.DropTableComment -sqlalchemy.schema.ForeignKey -sqlalchemy.schema.ForeignKeyConstraint -sqlalchemy.schema.Identity -sqlalchemy.schema.Index -sqlalchemy.schema.MetaData -sqlalchemy.schema.PrimaryKeyConstraint -sqlalchemy.schema.SchemaItem -sqlalchemy.schema.Sequence -sqlalchemy.schema.SetColumnComment -sqlalchemy.schema.SetTableComment -sqlalchemy.schema.Table -sqlalchemy.schema.ThreadLocalMetaData -sqlalchemy.schema.UniqueConstraint -sqlalchemy.schema._CreateDropBase -sqlalchemy.schema._DDLCompiles -sqlalchemy.schema._DropView -sqlalchemy.sql.Alias -sqlalchemy.sql.ClauseElement -sqlalchemy.sql.ColumnElement -sqlalchemy.sql.CompoundSelect -sqlalchemy.sql.Delete -sqlalchemy.sql.False_ -sqlalchemy.sql.FromClause -sqlalchemy.sql.Insert -sqlalchemy.sql.Join -sqlalchemy.sql.LambdaElement -sqlalchemy.sql.Select -sqlalchemy.sql.Selectable -sqlalchemy.sql.StatementLambdaElement -sqlalchemy.sql.Subquery -sqlalchemy.sql.TableClause -sqlalchemy.sql.TableSample -sqlalchemy.sql.True_ -sqlalchemy.sql.Update -sqlalchemy.sql.Values -sqlalchemy.sql.base.CacheableOptions -sqlalchemy.sql.base.Options -sqlalchemy.sql.compiler.GenericTypeCompiler -sqlalchemy.sql.compiler.StrSQLTypeCompiler -sqlalchemy.sql.compiler.TypeCompiler -sqlalchemy.sql.compiler._CompileLabel -sqlalchemy.sql.crud._multiparam_column -sqlalchemy.sql.ddl.AddConstraint -sqlalchemy.sql.ddl.CreateColumn -sqlalchemy.sql.ddl.CreateIndex -sqlalchemy.sql.ddl.CreateSchema -sqlalchemy.sql.ddl.CreateSequence -sqlalchemy.sql.ddl.CreateTable -sqlalchemy.sql.ddl.DDL -sqlalchemy.sql.ddl.DDLElement -sqlalchemy.sql.ddl.DropColumnComment -sqlalchemy.sql.ddl.DropConstraint -sqlalchemy.sql.ddl.DropIndex -sqlalchemy.sql.ddl.DropSchema -sqlalchemy.sql.ddl.DropSequence -sqlalchemy.sql.ddl.DropTable -sqlalchemy.sql.ddl.DropTableComment -sqlalchemy.sql.ddl.SetColumnComment -sqlalchemy.sql.ddl.SetTableComment -sqlalchemy.sql.ddl._CreateDropBase -sqlalchemy.sql.ddl._DDLCompiles -sqlalchemy.sql.ddl._DropView -sqlalchemy.sql.dml.Delete -sqlalchemy.sql.dml.Insert -sqlalchemy.sql.dml.Update -sqlalchemy.sql.dml.UpdateBase -sqlalchemy.sql.dml.ValuesBase -sqlalchemy.sql.elements.AsBoolean -sqlalchemy.sql.elements.BinaryExpression -sqlalchemy.sql.elements.BindParameter -sqlalchemy.sql.elements.BooleanClauseList -sqlalchemy.sql.elements.Case -sqlalchemy.sql.elements.Cast -sqlalchemy.sql.elements.ClauseElement -sqlalchemy.sql.elements.ClauseList -sqlalchemy.sql.elements.CollationClause -sqlalchemy.sql.elements.CollectionAggregate -sqlalchemy.sql.elements.ColumnClause -sqlalchemy.sql.elements.ColumnElement -sqlalchemy.sql.elements.Extract -sqlalchemy.sql.elements.False_ -sqlalchemy.sql.elements.FunctionFilter -sqlalchemy.sql.elements.GroupedElement -sqlalchemy.sql.elements.Grouping -sqlalchemy.sql.elements.IndexExpression -sqlalchemy.sql.elements.Label -sqlalchemy.sql.elements.NamedColumn -sqlalchemy.sql.elements.Null -sqlalchemy.sql.elements.Over -sqlalchemy.sql.elements.ReleaseSavepointClause -sqlalchemy.sql.elements.RollbackToSavepointClause -sqlalchemy.sql.elements.SavepointClause -sqlalchemy.sql.elements.Slice -sqlalchemy.sql.elements.TableValuedColumn -sqlalchemy.sql.elements.TextClause -sqlalchemy.sql.elements.True_ -sqlalchemy.sql.elements.Tuple -sqlalchemy.sql.elements.TypeClause -sqlalchemy.sql.elements.TypeCoerce -sqlalchemy.sql.elements.UnaryExpression -sqlalchemy.sql.elements.WithinGroup -sqlalchemy.sql.elements._IdentifiedClause -sqlalchemy.sql.elements._label_reference -sqlalchemy.sql.elements._textual_label_reference -sqlalchemy.sql.events.DDLEvents -sqlalchemy.sql.expression.Alias -sqlalchemy.sql.expression.AliasedReturnsRows -sqlalchemy.sql.expression.BinaryExpression -sqlalchemy.sql.expression.BindParameter -sqlalchemy.sql.expression.BooleanClauseList -sqlalchemy.sql.expression.CTE -sqlalchemy.sql.expression.Case -sqlalchemy.sql.expression.Cast -sqlalchemy.sql.expression.ClauseElement -sqlalchemy.sql.expression.ClauseList -sqlalchemy.sql.expression.CollectionAggregate -sqlalchemy.sql.expression.ColumnClause -sqlalchemy.sql.expression.ColumnElement -sqlalchemy.sql.expression.CompoundSelect -sqlalchemy.sql.expression.Delete -sqlalchemy.sql.expression.Exists -sqlalchemy.sql.expression.Extract -sqlalchemy.sql.expression.False_ -sqlalchemy.sql.expression.FromClause -sqlalchemy.sql.expression.FromGrouping -sqlalchemy.sql.expression.Function -sqlalchemy.sql.expression.FunctionElement -sqlalchemy.sql.expression.FunctionFilter -sqlalchemy.sql.expression.GenerativeSelect -sqlalchemy.sql.expression.Grouping -sqlalchemy.sql.expression.Insert -sqlalchemy.sql.expression.Join -sqlalchemy.sql.expression.Label -sqlalchemy.sql.expression.LambdaElement -sqlalchemy.sql.expression.Lateral -sqlalchemy.sql.expression.Null -sqlalchemy.sql.expression.Over -sqlalchemy.sql.expression.ReleaseSavepointClause -sqlalchemy.sql.expression.ReturnsRows -sqlalchemy.sql.expression.RollbackToSavepointClause -sqlalchemy.sql.expression.SavepointClause -sqlalchemy.sql.expression.ScalarSelect -sqlalchemy.sql.expression.Select -sqlalchemy.sql.expression.SelectBase -sqlalchemy.sql.expression.Selectable -sqlalchemy.sql.expression.StatementLambdaElement -sqlalchemy.sql.expression.Subquery -sqlalchemy.sql.expression.TableClause -sqlalchemy.sql.expression.TableSample -sqlalchemy.sql.expression.TableValuedAlias -sqlalchemy.sql.expression.TextClause -sqlalchemy.sql.expression.TextualSelect -sqlalchemy.sql.expression.True_ -sqlalchemy.sql.expression.Tuple -sqlalchemy.sql.expression.TypeClause -sqlalchemy.sql.expression.TypeCoerce -sqlalchemy.sql.expression.UnaryExpression -sqlalchemy.sql.expression.Update -sqlalchemy.sql.expression.UpdateBase -sqlalchemy.sql.expression.Values -sqlalchemy.sql.expression.ValuesBase -sqlalchemy.sql.expression.WithinGroup -sqlalchemy.sql.functions.AnsiFunction -sqlalchemy.sql.functions.Function -sqlalchemy.sql.functions.FunctionAsBinary -sqlalchemy.sql.functions.FunctionElement -sqlalchemy.sql.functions.GenericFunction -sqlalchemy.sql.functions.OrderedSetAgg -sqlalchemy.sql.functions.ReturnTypeFromArgs -sqlalchemy.sql.functions.ScalarFunctionColumn -sqlalchemy.sql.functions.array_agg -sqlalchemy.sql.functions.char_length -sqlalchemy.sql.functions.coalesce -sqlalchemy.sql.functions.concat -sqlalchemy.sql.functions.count -sqlalchemy.sql.functions.cube -sqlalchemy.sql.functions.cume_dist -sqlalchemy.sql.functions.current_date -sqlalchemy.sql.functions.current_time -sqlalchemy.sql.functions.current_timestamp -sqlalchemy.sql.functions.current_user -sqlalchemy.sql.functions.dense_rank -sqlalchemy.sql.functions.grouping_sets -sqlalchemy.sql.functions.localtime -sqlalchemy.sql.functions.localtimestamp -sqlalchemy.sql.functions.max -sqlalchemy.sql.functions.min -sqlalchemy.sql.functions.mode -sqlalchemy.sql.functions.next_value -sqlalchemy.sql.functions.now -sqlalchemy.sql.functions.percent_rank -sqlalchemy.sql.functions.percentile_cont -sqlalchemy.sql.functions.percentile_disc -sqlalchemy.sql.functions.random -sqlalchemy.sql.functions.rank -sqlalchemy.sql.functions.rollup -sqlalchemy.sql.functions.session_user -sqlalchemy.sql.functions.sum -sqlalchemy.sql.functions.sysdate -sqlalchemy.sql.functions.user -sqlalchemy.sql.lambdas.DeferredLambdaElement -sqlalchemy.sql.lambdas.LambdaElement -sqlalchemy.sql.lambdas.LambdaOptions -sqlalchemy.sql.lambdas.LinkedLambdaElement -sqlalchemy.sql.lambdas.NullLambdaStatement -sqlalchemy.sql.lambdas.StatementLambdaElement -sqlalchemy.sql.schema.CheckConstraint -sqlalchemy.sql.schema.Column -sqlalchemy.sql.schema.ColumnCollectionConstraint -sqlalchemy.sql.schema.ColumnDefault -sqlalchemy.sql.schema.Computed -sqlalchemy.sql.schema.Constraint -sqlalchemy.sql.schema.DefaultGenerator -sqlalchemy.sql.schema.ForeignKey -sqlalchemy.sql.schema.ForeignKeyConstraint -sqlalchemy.sql.schema.Identity -sqlalchemy.sql.schema.Index -sqlalchemy.sql.schema.MetaData -sqlalchemy.sql.schema.PrimaryKeyConstraint -sqlalchemy.sql.schema.SchemaItem -sqlalchemy.sql.schema.Sequence -sqlalchemy.sql.schema.Table -sqlalchemy.sql.schema.ThreadLocalMetaData -sqlalchemy.sql.schema.UniqueConstraint -sqlalchemy.sql.selectable.Alias -sqlalchemy.sql.selectable.AliasedReturnsRows -sqlalchemy.sql.selectable.BindParameter -sqlalchemy.sql.selectable.BooleanClauseList -sqlalchemy.sql.selectable.CTE -sqlalchemy.sql.selectable.ClauseElement -sqlalchemy.sql.selectable.ClauseList -sqlalchemy.sql.selectable.ColumnClause -sqlalchemy.sql.selectable.CompoundSelect -sqlalchemy.sql.selectable.Exists -sqlalchemy.sql.selectable.ForUpdateArg -sqlalchemy.sql.selectable.FromClause -sqlalchemy.sql.selectable.FromGrouping -sqlalchemy.sql.selectable.GenerativeSelect -sqlalchemy.sql.selectable.GroupedElement -sqlalchemy.sql.selectable.Grouping -sqlalchemy.sql.selectable.Join -sqlalchemy.sql.selectable.Lateral -sqlalchemy.sql.selectable.ReturnsRows -sqlalchemy.sql.selectable.ScalarSelect -sqlalchemy.sql.selectable.Select -sqlalchemy.sql.selectable.SelectBase -sqlalchemy.sql.selectable.SelectState.default_select_compile_options -sqlalchemy.sql.selectable.SelectStatementGrouping -sqlalchemy.sql.selectable.Selectable -sqlalchemy.sql.selectable.Subquery -sqlalchemy.sql.selectable.TableClause -sqlalchemy.sql.selectable.TableSample -sqlalchemy.sql.selectable.TableValuedAlias -sqlalchemy.sql.selectable.TableValuedColumn -sqlalchemy.sql.selectable.TextualSelect -sqlalchemy.sql.selectable.UnaryExpression -sqlalchemy.sql.selectable.Values -sqlalchemy.sql.selectable._MemoizedSelectEntities -sqlalchemy.sql.selectable._OffsetLimitParam -sqlalchemy.sql.sqltypes.ARRAY -sqlalchemy.sql.sqltypes.BIGINT -sqlalchemy.sql.sqltypes.BINARY -sqlalchemy.sql.sqltypes.BLOB -sqlalchemy.sql.sqltypes.BOOLEAN -sqlalchemy.sql.sqltypes.BigInteger -sqlalchemy.sql.sqltypes.Boolean -sqlalchemy.sql.sqltypes.CHAR -sqlalchemy.sql.sqltypes.CLOB -sqlalchemy.sql.sqltypes.DATE -sqlalchemy.sql.sqltypes.DATETIME -sqlalchemy.sql.sqltypes.DECIMAL -sqlalchemy.sql.sqltypes.Date -sqlalchemy.sql.sqltypes.DateTime -sqlalchemy.sql.sqltypes.Enum -sqlalchemy.sql.sqltypes.FLOAT -sqlalchemy.sql.sqltypes.Float -sqlalchemy.sql.sqltypes.INTEGER -sqlalchemy.sql.sqltypes.Integer -sqlalchemy.sql.sqltypes.Interval -sqlalchemy.sql.sqltypes.JSON -sqlalchemy.sql.sqltypes.JSON.JSONElementType -sqlalchemy.sql.sqltypes.JSON.JSONIndexType -sqlalchemy.sql.sqltypes.JSON.JSONIntIndexType -sqlalchemy.sql.sqltypes.JSON.JSONPathType -sqlalchemy.sql.sqltypes.JSON.JSONStrIndexType -sqlalchemy.sql.sqltypes.LargeBinary -sqlalchemy.sql.sqltypes.MatchType -sqlalchemy.sql.sqltypes.NCHAR -sqlalchemy.sql.sqltypes.NUMERIC -sqlalchemy.sql.sqltypes.NVARCHAR -sqlalchemy.sql.sqltypes.NullType -sqlalchemy.sql.sqltypes.Numeric -sqlalchemy.sql.sqltypes.PickleType -sqlalchemy.sql.sqltypes.REAL -sqlalchemy.sql.sqltypes.SMALLINT -sqlalchemy.sql.sqltypes.SmallInteger -sqlalchemy.sql.sqltypes.String -sqlalchemy.sql.sqltypes.TEXT -sqlalchemy.sql.sqltypes.TIME -sqlalchemy.sql.sqltypes.TIMESTAMP -sqlalchemy.sql.sqltypes.TableValueType -sqlalchemy.sql.sqltypes.Text -sqlalchemy.sql.sqltypes.Time -sqlalchemy.sql.sqltypes.TupleType -sqlalchemy.sql.sqltypes.TypeDecorator -sqlalchemy.sql.sqltypes.TypeEngine -sqlalchemy.sql.sqltypes.Unicode -sqlalchemy.sql.sqltypes.UnicodeText -sqlalchemy.sql.sqltypes.VARBINARY -sqlalchemy.sql.sqltypes.VARCHAR -sqlalchemy.sql.sqltypes.Variant -sqlalchemy.sql.sqltypes._AbstractInterval -sqlalchemy.sql.sqltypes._Binary -sqlalchemy.sql.traversals.ColIdentityComparatorStrategy -sqlalchemy.sql.traversals.TraversalComparatorStrategy -sqlalchemy.sql.traversals._CacheKey -sqlalchemy.sql.traversals._CopyInternals -sqlalchemy.sql.traversals._GetChildren -sqlalchemy.sql.type_api.TypeDecorator -sqlalchemy.sql.type_api.TypeEngine -sqlalchemy.sql.type_api.UserDefinedType -sqlalchemy.sql.type_api.Variant -sqlalchemy.sql.visitors.ExtendedInternalTraversal -sqlalchemy.sql.visitors.InternalTraversal -sqlalchemy.sql.visitors.Traversible -sqlalchemy.types.ARRAY -sqlalchemy.types.BIGINT -sqlalchemy.types.BINARY -sqlalchemy.types.BLOB -sqlalchemy.types.BOOLEAN -sqlalchemy.types.BigInteger -sqlalchemy.types.Boolean -sqlalchemy.types.CHAR -sqlalchemy.types.CLOB -sqlalchemy.types.DATE -sqlalchemy.types.DATETIME -sqlalchemy.types.DECIMAL -sqlalchemy.types.Date -sqlalchemy.types.DateTime -sqlalchemy.types.Enum -sqlalchemy.types.FLOAT -sqlalchemy.types.Float -sqlalchemy.types.INTEGER -sqlalchemy.types.Integer -sqlalchemy.types.Interval -sqlalchemy.types.JSON -sqlalchemy.types.JSON.JSONElementType -sqlalchemy.types.JSON.JSONIndexType -sqlalchemy.types.JSON.JSONIntIndexType -sqlalchemy.types.JSON.JSONPathType -sqlalchemy.types.JSON.JSONStrIndexType -sqlalchemy.types.LargeBinary -sqlalchemy.types.MatchType -sqlalchemy.types.NCHAR -sqlalchemy.types.NUMERIC -sqlalchemy.types.NVARCHAR -sqlalchemy.types.NullType -sqlalchemy.types.Numeric -sqlalchemy.types.PickleType -sqlalchemy.types.REAL -sqlalchemy.types.SMALLINT -sqlalchemy.types.SmallInteger -sqlalchemy.types.String -sqlalchemy.types.TEXT -sqlalchemy.types.TIME -sqlalchemy.types.TIMESTAMP -sqlalchemy.types.Text -sqlalchemy.types.Time -sqlalchemy.types.TupleType -sqlalchemy.types.TypeDecorator -sqlalchemy.types.TypeEngine -sqlalchemy.types.Unicode -sqlalchemy.types.UnicodeText -sqlalchemy.types.UserDefinedType -sqlalchemy.types.VARBINARY -sqlalchemy.types.VARCHAR -sqlalchemy.types._Binary +# Same error as in stdlib due to it being re-erported +sqlalchemy.util.compat.StringIO.seek +sqlalchemy.util.compat.StringIO.truncate +sqlalchemy.util.StringIO.seek +sqlalchemy.util.StringIO.truncate diff --git a/stubs/SQLAlchemy/@tests/test_cases/check_loader_option.py b/stubs/SQLAlchemy/@tests/test_cases/check_loader_option.py new file mode 100644 index 000000000..1f596af83 --- /dev/null +++ b/stubs/SQLAlchemy/@tests/test_cases/check_loader_option.py @@ -0,0 +1,60 @@ +from __future__ import annotations + +from typing_extensions import assert_type + +from sqlalchemy.orm.strategy_options import ( + Load, + contains_eager, + defaultload, + defer, + immediateload, + joinedload, + lazyload, + load_only, + loader_option, + noload, + raiseload, + selectin_polymorphic, + selectinload, + subqueryload, + undefer, + undefer_group, + with_expression, +) + + +def fn(loadopt: Load, *args: object) -> loader_option: + return loader_option() + + +# Testing that the function and return type of function are actually all instances of "loader_option" +assert_type(contains_eager, loader_option) +assert_type(contains_eager(fn), loader_option) +assert_type(load_only, loader_option) +assert_type(load_only(fn), loader_option) +assert_type(joinedload, loader_option) +assert_type(joinedload(fn), loader_option) +assert_type(subqueryload, loader_option) +assert_type(subqueryload(fn), loader_option) +assert_type(selectinload, loader_option) +assert_type(selectinload(fn), loader_option) +assert_type(lazyload, loader_option) +assert_type(lazyload(fn), loader_option) +assert_type(immediateload, loader_option) +assert_type(immediateload(fn), loader_option) +assert_type(noload, loader_option) +assert_type(noload(fn), loader_option) +assert_type(raiseload, loader_option) +assert_type(raiseload(fn), loader_option) +assert_type(defaultload, loader_option) +assert_type(defaultload(fn), loader_option) +assert_type(defer, loader_option) +assert_type(defer(fn), loader_option) +assert_type(undefer, loader_option) +assert_type(undefer(fn), loader_option) +assert_type(undefer_group, loader_option) +assert_type(undefer_group(fn), loader_option) +assert_type(with_expression, loader_option) +assert_type(with_expression(fn), loader_option) +assert_type(selectin_polymorphic, loader_option) +assert_type(selectin_polymorphic(fn), loader_option) diff --git a/stubs/SQLAlchemy/@tests/test_cases/check_register.py b/stubs/SQLAlchemy/@tests/test_cases/check_register.py new file mode 100644 index 000000000..28503f022 --- /dev/null +++ b/stubs/SQLAlchemy/@tests/test_cases/check_register.py @@ -0,0 +1,67 @@ +from __future__ import annotations + +from _typeshed.dbapi import DBAPIConnection +from typing import cast + +from sqlalchemy.engine.base import Engine +from sqlalchemy.engine.default import DefaultDialect +from sqlalchemy.engine.url import URL +from sqlalchemy.pool.base import Pool +from sqlalchemy.testing import config as ConfigModule +from sqlalchemy.testing.provision import ( + configure_follower, + create_db, + drop_all_schema_objects_post_tables, + drop_all_schema_objects_pre_tables, + drop_db, + follower_url_from_main, + generate_driver_url, + get_temp_table_name, + post_configure_engine, + prepare_for_drop_tables, + register, + run_reap_dbs, + set_default_schema_on_connection, + stop_test_class_outside_fixtures, + temp_table_keyword_args, + update_db_opts, +) +from sqlalchemy.util import immutabledict + +url = URL("", "", "", "", 0, "", immutabledict()) +engine = Engine(Pool(lambda: cast(DBAPIConnection, object())), DefaultDialect(), "") +config = cast(ConfigModule.Config, object()) +unused = None + + +class Foo: + pass + + +# Test that the decorator changes the first parameter to "cfg: str | URL | _ConfigProtocol" +@register.init +def no_args(__foo: Foo) -> None: + pass + + +no_args(cfg="") +no_args(cfg=url) +no_args(cfg=config) + +# Test pre-decorated functions +generate_driver_url(url, "", "") +drop_all_schema_objects_pre_tables(url, unused) +drop_all_schema_objects_post_tables(url, unused) +create_db(url, engine, unused) +drop_db(url, engine, unused) +update_db_opts(url, unused) +post_configure_engine(url, unused, unused) +follower_url_from_main(url, "") +configure_follower(url, unused) +run_reap_dbs(url, unused) +temp_table_keyword_args(url, engine) +prepare_for_drop_tables(url, unused) +stop_test_class_outside_fixtures(url, unused, type) +get_temp_table_name(url, unused, "") +set_default_schema_on_connection(ConfigModule, unused, unused) +set_default_schema_on_connection(config, unused, unused) diff --git a/stubs/SQLAlchemy/sqlalchemy/dialects/mssql/base.pyi b/stubs/SQLAlchemy/sqlalchemy/dialects/mssql/base.pyi index db60f2b7a..2e0acfccc 100644 --- a/stubs/SQLAlchemy/sqlalchemy/dialects/mssql/base.pyi +++ b/stubs/SQLAlchemy/sqlalchemy/dialects/mssql/base.pyi @@ -197,7 +197,6 @@ class MSExecutionContext(default.DefaultExecutionContext): @property def rowcount(self): ... def handle_dbapi_exception(self, e) -> None: ... - def get_result_cursor_strategy(self, result): ... def fire_sequence(self, seq, type_): ... def get_insert_default(self, column): ... diff --git a/stubs/SQLAlchemy/sqlalchemy/dialects/postgresql/base.pyi b/stubs/SQLAlchemy/sqlalchemy/dialects/postgresql/base.pyi index 1d62398c2..1a04cd3d0 100644 --- a/stubs/SQLAlchemy/sqlalchemy/dialects/postgresql/base.pyi +++ b/stubs/SQLAlchemy/sqlalchemy/dialects/postgresql/base.pyi @@ -163,6 +163,7 @@ class PGCompiler(compiler.SQLCompiler): class PGDDLCompiler(compiler.DDLCompiler): def get_column_specification(self, column, **kwargs): ... def visit_check_constraint(self, constraint): ... + def visit_foreign_key_constraint(self, constraint) -> str: ... # type: ignore[override] # Different params def visit_drop_table_comment(self, drop): ... def visit_create_enum_type(self, create): ... def visit_drop_enum_type(self, drop): ... diff --git a/stubs/SQLAlchemy/sqlalchemy/engine/interfaces.pyi b/stubs/SQLAlchemy/sqlalchemy/engine/interfaces.pyi index 3b4412abe..a62121626 100644 --- a/stubs/SQLAlchemy/sqlalchemy/engine/interfaces.pyi +++ b/stubs/SQLAlchemy/sqlalchemy/engine/interfaces.pyi @@ -116,7 +116,6 @@ class ExecutionContext: def pre_exec(self) -> None: ... def get_out_parameter_values(self, out_param_names) -> None: ... def post_exec(self) -> None: ... - def get_result_cursor_strategy(self, result) -> None: ... def handle_dbapi_exception(self, e) -> None: ... def should_autocommit_text(self, statement) -> None: ... def lastrow_has_defaults(self) -> None: ... diff --git a/stubs/SQLAlchemy/sqlalchemy/engine/url.pyi b/stubs/SQLAlchemy/sqlalchemy/engine/url.pyi index 0f2bfda2e..7a5b30789 100644 --- a/stubs/SQLAlchemy/sqlalchemy/engine/url.pyi +++ b/stubs/SQLAlchemy/sqlalchemy/engine/url.pyi @@ -22,6 +22,7 @@ class _URLTuple(NamedTuple): _Query: TypeAlias = Mapping[str, str | Sequence[str]] | Sequence[tuple[str, str | Sequence[str]]] class URL(_URLTuple): + def __new__(self, *arg, **kw) -> Self | URL: ... @classmethod def create( cls, diff --git a/stubs/SQLAlchemy/sqlalchemy/event/base.pyi b/stubs/SQLAlchemy/sqlalchemy/event/base.pyi index b3780d27b..d36703331 100644 --- a/stubs/SQLAlchemy/sqlalchemy/event/base.pyi +++ b/stubs/SQLAlchemy/sqlalchemy/event/base.pyi @@ -12,7 +12,7 @@ class _Dispatch: class _EventMeta(type): def __init__(cls, classname, bases, dict_) -> None: ... -class Events: +class Events(metaclass=_EventMeta): dispatch: Any class _JoinedDispatcher: diff --git a/stubs/SQLAlchemy/sqlalchemy/orm/collections.pyi b/stubs/SQLAlchemy/sqlalchemy/orm/collections.pyi index acfc63049..91d88b539 100644 --- a/stubs/SQLAlchemy/sqlalchemy/orm/collections.pyi +++ b/stubs/SQLAlchemy/sqlalchemy/orm/collections.pyi @@ -1,5 +1,14 @@ -from _typeshed import Incomplete -from typing import Any +from _typeshed import Incomplete, SupportsKeysAndGetItem +from collections.abc import Iterable +from typing import Any, TypeVar, overload +from typing_extensions import Literal, SupportsIndex + +from ..orm.attributes import Event +from ..util.langhelpers import _symbol, symbol + +_T = TypeVar("_T") +_KT = TypeVar("_KT") +_VT = TypeVar("_VT") class _PlainColumnGetter: cols: Any @@ -81,12 +90,41 @@ class CollectionAdapter: def fire_remove_event(self, item, initiator: Incomplete | None = None) -> None: ... def fire_pre_remove_event(self, initiator: Incomplete | None = None) -> None: ... -class InstrumentedList(list[Any]): ... -class InstrumentedSet(set[Any]): ... -class InstrumentedDict(dict[Any, Any]): ... +class InstrumentedList(list[_T]): + def append(self, item, _sa_initiator: Event | Literal[False] | None = None) -> None: ... + def clear(self, index: SupportsIndex = -1) -> None: ... + def extend(self, iterable: Iterable[_T]) -> None: ... + def insert(self, index: SupportsIndex, value: _T) -> None: ... + def pop(self, index: SupportsIndex = -1) -> _T: ... + def remove(self, value: _T, _sa_initiator: Event | Literal[False] | None = None) -> None: ... -class MappedCollection(dict[Any, Any]): +class InstrumentedSet(set[_T]): + def add(self, value: _T, _sa_initiator: Event | Literal[False] | None = None) -> None: ... + def difference_update(self, value: Iterable[_T]) -> None: ... # type: ignore[override] + def discard(self, value: _T, _sa_initiator: Event | Literal[False] | None = None) -> None: ... + def intersection_update(self, other: Iterable[_T]) -> None: ... # type: ignore[override] + def remove(self, value: _T, _sa_initiator: Event | Literal[False] | None = None) -> None: ... + def symmetric_difference_update(self, other: Iterable[_T]) -> None: ... + def update(self, value: Iterable[_T]) -> None: ... # type: ignore[override] + +class InstrumentedDict(dict[_KT, _VT]): ... + +class MappedCollection(dict[_KT, _VT]): keyfunc: Any def __init__(self, keyfunc) -> None: ... - def set(self, value, _sa_initiator: Incomplete | None = None) -> None: ... - def remove(self, value, _sa_initiator: Incomplete | None = None) -> None: ... + def set(self, value: _VT, _sa_initiator: Event | Literal[False] | None = None) -> None: ... + def remove(self, value: _VT, _sa_initiator: Event | Literal[False] | None = None) -> None: ... + def __delitem__(self, key: _KT, _sa_initiatorEvent: Event | Literal[False] | None = None) -> None: ... + def __setitem__(self, key: _KT, value: _VT, _sa_initiator: Event | Literal[False] | None = None) -> None: ... + @overload + def pop(self, key: _KT) -> _VT: ... + @overload + def pop(self, key: _KT, default: _VT | _T | _symbol | symbol = ...) -> _VT | _T: ... + @overload # type: ignore[override] + def setdefault(self, key: _KT, default: _T) -> _VT | _T: ... + @overload + def setdefault(self, key: _KT, default: None = None) -> _VT | None: ... + @overload + def update(self, __other: SupportsKeysAndGetItem[_KT, _VT] = ..., **kwargs: _VT) -> None: ... + @overload + def update(self, __other: Iterable[tuple[_KT, _VT]] = ..., **kwargs: _VT) -> None: ... diff --git a/stubs/SQLAlchemy/sqlalchemy/orm/decl_api.pyi b/stubs/SQLAlchemy/sqlalchemy/orm/decl_api.pyi index f36163478..f109fd39b 100644 --- a/stubs/SQLAlchemy/sqlalchemy/orm/decl_api.pyi +++ b/stubs/SQLAlchemy/sqlalchemy/orm/decl_api.pyi @@ -13,7 +13,7 @@ _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. -class _DeclarativeBase(Any): # super classes are dynamic +class _DeclarativeBase(Any): # type: ignore[misc] # super classes are dynamic registry: ClassVar[registry] metadata: ClassVar[MetaData] __abstract__: ClassVar[bool] diff --git a/stubs/SQLAlchemy/sqlalchemy/orm/strategy_options.pyi b/stubs/SQLAlchemy/sqlalchemy/orm/strategy_options.pyi index 7147a204f..48321a09b 100644 --- a/stubs/SQLAlchemy/sqlalchemy/orm/strategy_options.pyi +++ b/stubs/SQLAlchemy/sqlalchemy/orm/strategy_options.pyi @@ -1,5 +1,7 @@ from _typeshed import Incomplete +from collections.abc import Callable from typing import Any +from typing_extensions import Self from ..sql.base import Generative from .interfaces import LoaderOption @@ -17,27 +19,27 @@ class Load(Generative, LoaderOption): propagate_to_loaders: bool def process_compile_state_replaced_entities(self, compile_state, mapper_entities) -> None: ... def process_compile_state(self, compile_state) -> None: ... - def options(self, *opts) -> None: ... - def set_relationship_strategy(self, attr, strategy, propagate_to_loaders: bool = True) -> None: ... - def set_column_strategy(self, attrs, strategy, opts: Incomplete | None = None, opts_only: bool = False) -> None: ... - def set_generic_strategy(self, attrs, strategy) -> None: ... - def set_class_strategy(self, strategy, opts) -> None: ... - # added dynamically at runtime - def contains_eager(self, attr, alias: Incomplete | None = None): ... - def load_only(self, *attrs): ... - def joinedload(self, attr, innerjoin: Incomplete | None = None): ... - def subqueryload(self, attr): ... - def selectinload(self, attr): ... - def lazyload(self, attr): ... - def immediateload(self, attr): ... - def noload(self, attr): ... - def raiseload(self, attr, sql_only: bool = False): ... - def defaultload(self, attr): ... - def defer(self, key, raiseload: bool = False): ... - def undefer(self, key): ... - def undefer_group(self, name): ... - def with_expression(self, key, expression): ... - def selectin_polymorphic(self, classes): ... + def options(self, *opts) -> Self: ... + def set_relationship_strategy(self, attr, strategy, propagate_to_loaders: bool = True) -> Self: ... + def set_column_strategy(self, attrs, strategy, opts: Incomplete | None = None, opts_only: bool = False) -> Self: ... + def set_generic_strategy(self, attrs, strategy) -> Self: ... + def set_class_strategy(self, strategy, opts) -> Self: ... + # Added dynamically at runtime + def contains_eager(loadopt, attr, alias: Incomplete | None = None) -> Self: ... + def load_only(loadopt, *attrs) -> Self: ... + def joinedload(loadopt, attr, innerjoin: Incomplete | None = None) -> Self: ... + def subqueryload(loadopt, attr) -> Self: ... + def selectinload(loadopt, attr) -> Self: ... + def lazyload(loadopt, attr) -> Self: ... + def immediateload(loadopt, attr) -> Self: ... + def noload(loadopt, attr) -> Self: ... + def raiseload(loadopt, attr, sql_only: bool = False) -> Self: ... + def defaultload(loadopt, attr) -> Self: ... + def defer(loadopt, key, raiseload: bool = False) -> Self: ... + def undefer(loadopt, key) -> Self: ... + def undefer_group(loadopt, name) -> Self: ... + def with_expression(loadopt, key, expression) -> Self: ... + def selectin_polymorphic(loadopt, classes) -> Self: ... class _UnboundLoad(Load): path: Any @@ -45,22 +47,39 @@ class _UnboundLoad(Load): def __init__(self) -> None: ... class loader_option: - name: Any - fn: Any - def __call__(self, fn): ... + name: str + # The first parameter of this Callable should always be `loadopt: Load` + fn: Callable[..., loader_option] + def __call__(self, fn: Callable[..., loader_option]) -> Self: ... -def contains_eager(loadopt, attr, alias: Incomplete | None = ...): ... -def load_only(loadopt, *attrs): ... -def joinedload(loadopt, attr, innerjoin: Incomplete | None = ...): ... -def subqueryload(loadopt, attr): ... -def selectinload(loadopt, attr): ... -def lazyload(loadopt, attr): ... -def immediateload(loadopt, attr): ... -def noload(loadopt, attr): ... -def raiseload(loadopt, attr, sql_only: bool = ...): ... -def defaultload(loadopt, attr): ... -def defer(loadopt, key, raiseload: bool = ...): ... -def undefer(loadopt, key): ... -def undefer_group(loadopt, name): ... -def with_expression(loadopt, key, expression): ... -def selectin_polymorphic(loadopt, classes): ... +# loader_option instances that can be used to dynamically add methods to Load at runtime +@loader_option() +def contains_eager(loadopt: Load, attr, alias: Incomplete | None = ...) -> loader_option: ... +@loader_option() +def load_only(loadopt: Load, *attrs) -> loader_option: ... +@loader_option() +def joinedload(loadopt, attr, innerjoin=None): ... +@loader_option() +def subqueryload(loadopt: Load, attr) -> loader_option: ... +@loader_option() +def selectinload(loadopt: Load, attr) -> loader_option: ... +@loader_option() +def lazyload(loadopt: Load, attr) -> loader_option: ... +@loader_option() +def immediateload(loadopt: Load, attr) -> loader_option: ... +@loader_option() +def noload(loadopt: Load, attr) -> loader_option: ... +@loader_option() +def raiseload(loadopt: Load, attr, sql_only: bool = ...) -> loader_option: ... +@loader_option() +def defaultload(loadopt: Load, attr) -> loader_option: ... +@loader_option() +def defer(loadopt: Load, key, raiseload: bool = ...) -> loader_option: ... +@loader_option() +def undefer(loadopt: Load, key) -> loader_option: ... +@loader_option() +def undefer_group(loadopt: Load, name) -> loader_option: ... +@loader_option() +def with_expression(loadopt: Load, key) -> loader_option: ... +@loader_option() +def selectin_polymorphic(loadopt: Load, classes) -> loader_option: ... diff --git a/stubs/SQLAlchemy/sqlalchemy/pool/base.pyi b/stubs/SQLAlchemy/sqlalchemy/pool/base.pyi index 464a884c4..0a22c6e17 100644 --- a/stubs/SQLAlchemy/sqlalchemy/pool/base.pyi +++ b/stubs/SQLAlchemy/sqlalchemy/pool/base.pyi @@ -1,4 +1,6 @@ from _typeshed import Incomplete +from _typeshed.dbapi import DBAPIConnection +from collections.abc import Callable from typing import Any from .. import log @@ -24,7 +26,7 @@ class Pool(log.Identified): echo: Any def __init__( self, - creator, + creator: Callable[[], DBAPIConnection], recycle: int = -1, echo: Incomplete | None = None, logging_name: Incomplete | None = None, diff --git a/stubs/SQLAlchemy/sqlalchemy/sql/base.pyi b/stubs/SQLAlchemy/sqlalchemy/sql/base.pyi index e2bd4daa9..bf12c6fd3 100644 --- a/stubs/SQLAlchemy/sqlalchemy/sql/base.pyi +++ b/stubs/SQLAlchemy/sqlalchemy/sql/base.pyi @@ -73,7 +73,7 @@ class _MetaOptions(type): def __init__(cls, classname, bases, dict_) -> None: ... def __add__(self, other): ... -class Options: +class Options(metaclass=_MetaOptions): def __init__(self, **kw) -> None: ... def __add__(self, other): ... def __eq__(self, other): ... diff --git a/stubs/SQLAlchemy/sqlalchemy/sql/compiler.pyi b/stubs/SQLAlchemy/sqlalchemy/sql/compiler.pyi index f33bda45a..c10001f35 100644 --- a/stubs/SQLAlchemy/sqlalchemy/sql/compiler.pyi +++ b/stubs/SQLAlchemy/sqlalchemy/sql/compiler.pyi @@ -1,6 +1,8 @@ from _typeshed import Incomplete from typing import NamedTuple +from sqlalchemy.util.langhelpers import EnsureKWArgType + from ..util import memoized_property from . import elements @@ -67,7 +69,7 @@ class Compiled: @property def params(self): ... -class TypeCompiler: +class TypeCompiler(metaclass=EnsureKWArgType): ensure_kwarg: str dialect: Incomplete def __init__(self, dialect) -> None: ... diff --git a/stubs/SQLAlchemy/sqlalchemy/sql/functions.pyi b/stubs/SQLAlchemy/sqlalchemy/sql/functions.pyi index 1cf78c365..22404d761 100644 --- a/stubs/SQLAlchemy/sqlalchemy/sql/functions.pyi +++ b/stubs/SQLAlchemy/sqlalchemy/sql/functions.pyi @@ -87,7 +87,7 @@ class Function(FunctionElement): class _GenericMeta(TraversibleType): def __init__(cls, clsname, bases, clsdict) -> None: ... -class GenericFunction: +class GenericFunction(Function, metaclass=_GenericMeta): name: Incomplete identifier: Incomplete coerce_arguments: bool diff --git a/stubs/SQLAlchemy/sqlalchemy/sql/type_api.pyi b/stubs/SQLAlchemy/sqlalchemy/sql/type_api.pyi index 446590658..f5e384455 100644 --- a/stubs/SQLAlchemy/sqlalchemy/sql/type_api.pyi +++ b/stubs/SQLAlchemy/sqlalchemy/sql/type_api.pyi @@ -55,7 +55,7 @@ class VisitableCheckKWArg(util.EnsureKWArgType, TraversibleType): ... class ExternalType: cache_ok: Any -class UserDefinedType: +class UserDefinedType(ExternalType, TypeEngine, metaclass=VisitableCheckKWArg): __visit_name__: str ensure_kwarg: str def coerce_compared_value(self, op, value): ... diff --git a/stubs/SQLAlchemy/sqlalchemy/sql/visitors.pyi b/stubs/SQLAlchemy/sqlalchemy/sql/visitors.pyi index b3a9cc591..e8378c67d 100644 --- a/stubs/SQLAlchemy/sqlalchemy/sql/visitors.pyi +++ b/stubs/SQLAlchemy/sqlalchemy/sql/visitors.pyi @@ -3,14 +3,14 @@ from typing import Any class TraversibleType(type): def __init__(cls, clsname, bases, clsdict) -> None: ... -class Traversible: +class Traversible(metaclass=TraversibleType): def __class_getitem__(cls, key): ... def get_children(self, omit_attrs=(), **kw): ... class _InternalTraversalType(type): def __init__(cls, clsname, bases, clsdict) -> None: ... -class InternalTraversal: +class InternalTraversal(metaclass=_InternalTraversalType): def dispatch(self, visit_symbol): ... def run_generated_dispatch(self, target, internal_dispatch, generate_dispatcher_name): ... def generate_dispatch(self, target_cls, internal_dispatch, generate_dispatcher_name): ... diff --git a/stubs/SQLAlchemy/sqlalchemy/testing/config.pyi b/stubs/SQLAlchemy/sqlalchemy/testing/config.pyi index db67aa9cb..c787b8c73 100644 --- a/stubs/SQLAlchemy/sqlalchemy/testing/config.pyi +++ b/stubs/SQLAlchemy/sqlalchemy/testing/config.pyi @@ -1,12 +1,13 @@ -from typing import Any +from _typeshed import Incomplete +from typing import Any, Protocol -requirements: Any -db: Any -db_url: Any -db_opts: Any -file_config: Any -test_schema: Any -test_schema_2: Any +requirements: Incomplete | None +db: Incomplete | None +db_url: Incomplete | None +db_opts: Incomplete | None +file_config: Incomplete | None +test_schema: str | None +test_schema_2: str | None any_async: bool ident: str @@ -16,17 +17,26 @@ def fixture(*arg, **kw): ... def get_current_test_name(): ... def mark_base_test_class(): ... +# Matches the intersection of the config module and the Config class +class _ConfigProtocol(Protocol): # noqa: Y046 + db: Incomplete + db_opts: Incomplete + file_config: Incomplete + test_schema: Any # AnyOf[str, None] + test_schema_2: Any # AnyOf[str, None] + def skip_test(self, msg) -> None: ... + class Config: - db: Any - db_opts: Any - options: Any - file_config: Any + db: Incomplete + db_opts: Incomplete + options: Incomplete + file_config: Incomplete test_schema: str test_schema_2: str - is_async: Any + is_async: Incomplete def __init__(self, db, db_opts, options, file_config) -> None: ... @classmethod - def register(cls, db, db_opts, options, file_config): ... + def register(cls, db, db_opts, options, file_config) -> Config: ... @classmethod def set_as_current(cls, config, namespace) -> None: ... @classmethod diff --git a/stubs/SQLAlchemy/sqlalchemy/testing/provision.pyi b/stubs/SQLAlchemy/sqlalchemy/testing/provision.pyi index a6c48328b..8029cd4e9 100644 --- a/stubs/SQLAlchemy/sqlalchemy/testing/provision.pyi +++ b/stubs/SQLAlchemy/sqlalchemy/testing/provision.pyi @@ -1,33 +1,63 @@ -from typing import Any +from _typeshed import Incomplete +from collections.abc import Callable +from logging import Logger +from typing import Any, Generic, NoReturn, TypeVar +from typing_extensions import Self, TypeAlias -log: Any -FOLLOWER_IDENT: Any +from ..engine.interfaces import Connectable +from ..engine.url import URL +from .config import Config, _ConfigProtocol -class register: - fns: Any - @classmethod - def init(cls, fn): ... - def for_db(self, *dbnames): ... - def __call__(self, cfg, *arg): ... +_Unused: TypeAlias = object +_S = TypeVar("_S", bound=str) +_U = TypeVar("_U", bound=URL) +_F = TypeVar("_F", bound=Callable[..., str | URL | None]) + +log: Logger +FOLLOWER_IDENT: Incomplete | None def create_follower_db(follower_ident) -> None: ... -def setup_config(db_url, options, file_config, follower_ident): ... +def setup_config(db_url, options, file_config, follower_ident) -> Config: ... def drop_follower_db(follower_ident) -> None: ... def generate_db_urls(db_urls, extra_drivers) -> None: ... -def generate_driver_url(url, driver, query_str): ... -def drop_all_schema_objects_pre_tables(cfg, eng) -> None: ... -def drop_all_schema_objects_post_tables(cfg, eng) -> None: ... def drop_all_schema_objects(cfg, eng) -> None: ... -def create_db(cfg, eng, ident) -> None: ... -def drop_db(cfg, eng, ident) -> None: ... -def update_db_opts(cfg, db_opts) -> None: ... -def post_configure_engine(url, engine, follower_ident) -> None: ... -def follower_url_from_main(url, ident): ... -def configure_follower(cfg, ident) -> None: ... -def run_reap_dbs(url, ident) -> None: ... def reap_dbs(idents_file) -> None: ... -def temp_table_keyword_args(cfg, eng) -> None: ... -def prepare_for_drop_tables(config, connection) -> None: ... -def stop_test_class_outside_fixtures(config, db, testcls) -> None: ... -def get_temp_table_name(cfg, eng, base_name): ... -def set_default_schema_on_connection(cfg, dbapi_connection, schema_name) -> None: ... + +class register(Generic[_F]): + fns: dict[str, _F] + @classmethod + def init(cls, fn: _F) -> Self: ... + def for_db(self, *dbnames: str) -> Callable[[_F], Self]: ... + # Impossible to specify the args from the generic Callable in the current type system + def __call__(self, cfg: str | URL | _ConfigProtocol, *arg: Any) -> str | URL | None: ... # AnyOf[str | URL | None] + +@register.init +def generate_driver_url(url: _U, driver: str, query_str: str) -> _U | None: ... +@register.init +def drop_all_schema_objects_pre_tables(cfg: _Unused, eng: _Unused) -> None: ... +@register.init +def drop_all_schema_objects_post_tables(cfg: _Unused, eng: _Unused) -> None: ... +@register.init +def create_db(cfg: _Unused, eng: Connectable, ident: _Unused) -> NoReturn: ... +@register.init +def drop_db(cfg: _Unused, eng: Connectable, ident: _Unused) -> NoReturn: ... +@register.init +def update_db_opts(db_url: _Unused, db_opts: _Unused) -> None: ... +@register.init +def post_configure_engine(url: _Unused, engine: _Unused, follower_ident: _Unused) -> None: ... +@register.init +def follower_url_from_main(url: _U, ident: str) -> _U: ... +@register.init +def configure_follower(cfg: _Unused, ident: _Unused) -> None: ... +@register.init +def run_reap_dbs(url: _Unused, ident: _Unused) -> None: ... +@register.init +def temp_table_keyword_args(cfg: _Unused, eng: Connectable) -> NoReturn: ... +@register.init +def prepare_for_drop_tables(config: _Unused, connection: _Unused) -> None: ... +@register.init +def stop_test_class_outside_fixtures(config: _Unused, db: _Unused, testcls: _Unused) -> None: ... +@register.init # type: ignore[type-var] # False-positive, _S is bound to str +def get_temp_table_name(cfg: _Unused, eng: _Unused, base_name: _S) -> _S: ... +@register.init +def set_default_schema_on_connection(cfg: _ConfigProtocol, dbapi_connection: _Unused, schema_name: _Unused) -> NoReturn: ... diff --git a/stubs/SQLAlchemy/sqlalchemy/util/__init__.pyi b/stubs/SQLAlchemy/sqlalchemy/util/__init__.pyi index d569a665d..ae064446a 100644 --- a/stubs/SQLAlchemy/sqlalchemy/util/__init__.pyi +++ b/stubs/SQLAlchemy/sqlalchemy/util/__init__.pyi @@ -59,6 +59,7 @@ from .compat import ( has_refcount_gc as has_refcount_gc, inspect_getfullargspec as inspect_getfullargspec, int_types as int_types, + is64bit as is64bit, iterbytes as iterbytes, itertools_filter as itertools_filter, itertools_filterfalse as itertools_filterfalse, @@ -76,6 +77,9 @@ from .compat import ( py37 as py37, py38 as py38, py39 as py39, + py310 as py310, + py311 as py311, + py312 as py312, pypy as pypy, quote_plus as quote_plus, raise_ as raise_, diff --git a/stubs/SQLAlchemy/sqlalchemy/util/_collections.pyi b/stubs/SQLAlchemy/sqlalchemy/util/_collections.pyi index 0317b827b..7fde0fc12 100644 --- a/stubs/SQLAlchemy/sqlalchemy/util/_collections.pyi +++ b/stubs/SQLAlchemy/sqlalchemy/util/_collections.pyi @@ -140,7 +140,7 @@ class IdentitySet: def __hash__(self) -> int: ... class WeakSequence: - def __init__(self, __elements=...) -> None: ... + def __init__(self, _WeakSequence__elements: Iterable[Incomplete] = ()) -> None: ... def append(self, item) -> None: ... def __len__(self) -> int: ... def __iter__(self): ... diff --git a/stubs/SQLAlchemy/sqlalchemy/util/compat.pyi b/stubs/SQLAlchemy/sqlalchemy/util/compat.pyi index 6bee9382e..02ce27adc 100644 --- a/stubs/SQLAlchemy/sqlalchemy/util/compat.pyi +++ b/stubs/SQLAlchemy/sqlalchemy/util/compat.pyi @@ -1,19 +1,20 @@ -import builtins -import collections -import contextlib import itertools import operator import pickle as pickle +import sys import threading as threading from _typeshed import Incomplete, Unused from abc import ABC as ABC +from builtins import callable as callable, next as next +from collections import namedtuple as namedtuple # noqa: Y024 # Actual import +from contextlib import contextmanager as contextmanager from datetime import timezone as timezone from functools import reduce as reduce -from io import BytesIO as BytesIO, StringIO as StringIO +from io import BytesIO, StringIO as StringIO from itertools import zip_longest as zip_longest from time import perf_counter as perf_counter from typing import TYPE_CHECKING as TYPE_CHECKING, Any, NamedTuple -from typing_extensions import Literal +from typing_extensions import Final from urllib.parse import ( parse_qsl as parse_qsl, quote as quote, @@ -24,21 +25,28 @@ from urllib.parse import ( byte_buffer = BytesIO +py312: bool +py311: bool +py310: bool py39: bool py38: bool py37: bool -py3k: Literal[True] -py2k: Literal[False] +py3k: Final = True +py2k: Final = False pypy: bool cpython: bool -win32: bool -osx: bool +if sys.platform == "win32": + win32: Final = True +else: + win32: Final = False +if sys.platform == "darwin": + osx: Final = True +else: + osx: Final = False arm: bool +is64bit: bool has_refcount_gc: bool -contextmanager = contextlib.contextmanager dottedgetter = operator.attrgetter -namedtuple = collections.namedtuple # noqa: Y024 -next = builtins.next class FullArgSpec(NamedTuple): args: Any @@ -82,10 +90,6 @@ def raise_( ) -> None: ... def u(s): ... def ue(s): ... - -callable = builtins.callable - -def safe_bytestring(text): ... def inspect_formatargspec( args, varargs: Incomplete | None = None, diff --git a/stubs/SQLAlchemy/sqlalchemy/util/langhelpers.pyi b/stubs/SQLAlchemy/sqlalchemy/util/langhelpers.pyi index d57b9adde..a18aa1a09 100644 --- a/stubs/SQLAlchemy/sqlalchemy/util/langhelpers.pyi +++ b/stubs/SQLAlchemy/sqlalchemy/util/langhelpers.pyi @@ -34,7 +34,7 @@ class PluginLoader: def __init__(self, group, auto_fn: Incomplete | None = None) -> None: ... def clear(self) -> None: ... def load(self, name): ... - def register(self, name, modulepath, objname): ... + def register(self, name, modulepath, objname) -> None: ... def get_cls_kwargs(cls, _set: Incomplete | None = None): ... def get_func_kwargs(func): ... @@ -133,12 +133,16 @@ class hybridmethod: def classlevel(self, func): ... class _symbol(int): - def __new__(cls, name, doc: Incomplete | None = None, canonical: Incomplete | None = None): ... + def __new__( # noqa: Y034 # Explicitly instantiates _symbol + self, name, doc: Incomplete | None = None, canonical: Incomplete | None = None + ) -> _symbol: ... def __reduce__(self): ... class symbol: symbols: Any - def __new__(cls, name, doc: Incomplete | None = None, canonical: Incomplete | None = None): ... + def __new__( # type: ignore[misc] # Explicitly instantiates _symbol + cls, name, doc: Incomplete | None = None, canonical: Incomplete | None = None + ) -> _symbol: ... @classmethod def parse_user_argument(cls, arg, choices, name, resolve_symbol_names: bool = False): ...