From fd9fc2fb0a55215c44317a35d7674ef6061e255e Mon Sep 17 00:00:00 2001 From: KlaasJan Date: Sun, 20 Dec 2020 14:04:52 +0100 Subject: [PATCH 1/2] Fix for issue #156 --- sqlalchemy-stubs/sql/schema.pyi | 2 +- test/test-data/sqlalchemy-sql-schema.test | 35 +++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/sqlalchemy-stubs/sql/schema.pyi b/sqlalchemy-stubs/sql/schema.pyi index 4d24906..c42b4d7 100644 --- a/sqlalchemy-stubs/sql/schema.pyi +++ b/sqlalchemy-stubs/sql/schema.pyi @@ -274,7 +274,7 @@ class ForeignKeyConstraint(ColumnCollectionConstraint): use_alter: bool = ... match: Optional[str] = ... elements: List[ForeignKey] = ... - def __init__(self, columns: SequenceType[str], refcolumns: SequenceType[Union[str, Column[Any]]], name: Optional[str] = ..., + def __init__(self, columns: SequenceType[Union[str, Column[Any]]], refcolumns: SequenceType[Union[str, Column[Any]]], name: Optional[str] = ..., onupdate: Optional[str] = ..., ondelete: Optional[str] = ..., deferrable: Optional[bool] = ..., initially: Optional[str] = ..., use_alter: bool = ..., link_to_name: bool = ..., match: Optional[str] = ..., table: Optional[Table] = ..., info: Optional[Mapping[str, Any]] = ..., **dialect_kw: Any) -> None: ... diff --git a/test/test-data/sqlalchemy-sql-schema.test b/test/test-data/sqlalchemy-sql-schema.test index bc22291..16d1613 100644 --- a/test/test-data/sqlalchemy-sql-schema.test +++ b/test/test-data/sqlalchemy-sql-schema.test @@ -76,3 +76,38 @@ test_table = Table('test', metadata, Index('idx1', 'id', text("lower(name)")), ) [out] + +[case testColumnWithForeignKeyThroughTableArgsAsColumn] +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy import Column, ForeignKeyConstraint, Integer + +Base = declarative_base() + +class Profile(Base): + __tablename__ = "profile" + id = Column(Integer, primary_key=True) + +class User(Base): + + __tablename__ = "user" + artkey = Column(Integer, primary_key=True) + profile_id = Column(Integer, nullable=False) + __table_args__ = (ForeignKeyConstraint([profile_id], [Profile.id]), ) +[out] + +[case testColumnWithForeignKeyThroughTableArgsAsString] +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy import Column, ForeignKeyConstraint, Integer + +Base = declarative_base() + +class Profile(Base): + __tablename__ = "profile" + id = Column(Integer, primary_key=True) + +class User(Base): + __tablename__ = "user" + id = Column(Integer, primary_key=True) + profile_id = Column(Integer, nullable=False) + __table_args__ = (ForeignKeyConstraint(["profile_id"], [Profile.id]), ) +[out] From 8b2a740d5a67376a245a7a212523c4b67ad22147 Mon Sep 17 00:00:00 2001 From: KlaasJan Date: Sun, 20 Dec 2020 14:36:30 +0100 Subject: [PATCH 2/2] flakes --- sqlalchemy-stubs/sql/schema.pyi | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/sqlalchemy-stubs/sql/schema.pyi b/sqlalchemy-stubs/sql/schema.pyi index c42b4d7..93ff9ab 100644 --- a/sqlalchemy-stubs/sql/schema.pyi +++ b/sqlalchemy-stubs/sql/schema.pyi @@ -274,10 +274,11 @@ class ForeignKeyConstraint(ColumnCollectionConstraint): use_alter: bool = ... match: Optional[str] = ... elements: List[ForeignKey] = ... - def __init__(self, columns: SequenceType[Union[str, Column[Any]]], refcolumns: SequenceType[Union[str, Column[Any]]], name: Optional[str] = ..., - onupdate: Optional[str] = ..., ondelete: Optional[str] = ..., deferrable: Optional[bool] = ..., - initially: Optional[str] = ..., use_alter: bool = ..., link_to_name: bool = ..., match: Optional[str] = ..., - table: Optional[Table] = ..., info: Optional[Mapping[str, Any]] = ..., **dialect_kw: Any) -> None: ... + def __init__(self, columns: SequenceType[Union[str, Column[Any]]], refcolumns: SequenceType[Union[str, Column[Any]]], + name: Optional[str] = ..., onupdate: Optional[str] = ..., ondelete: Optional[str] = ..., + deferrable: Optional[bool] = ..., initially: Optional[str] = ..., use_alter: bool = ..., + link_to_name: bool = ..., match: Optional[str] = ..., table: Optional[Table] = ..., + info: Optional[Mapping[str, Any]] = ..., **dialect_kw: Any) -> None: ... @property def referred_table(self) -> Table: ... @property