(app: Flask, model_class: t.Any)
| 84 | |
| 85 | @pytest.mark.usefixtures("app_ctx") |
| 86 | def test_get_bind_inheritance(app: Flask, model_class: t.Any) -> None: |
| 87 | app.config["SQLALCHEMY_BINDS"] = {"a": "sqlite://"} |
| 88 | db = SQLAlchemy(app, model_class=model_class) |
| 89 | |
| 90 | if issubclass(db.Model, (sa_orm.MappedAsDataclass)): |
| 91 | |
| 92 | class User(db.Model): |
| 93 | __bind_key__ = "a" |
| 94 | id: sa_orm.Mapped[int] = sa_orm.mapped_column( |
| 95 | sa.Integer, primary_key=True, init=False |
| 96 | ) |
| 97 | type: sa_orm.Mapped[str] = sa_orm.mapped_column( |
| 98 | sa.String, nullable=False, init=False |
| 99 | ) |
| 100 | __mapper_args__ = {"polymorphic_on": type, "polymorphic_identity": "user"} |
| 101 | |
| 102 | class Admin(User): |
| 103 | id: sa_orm.Mapped[int] = sa_orm.mapped_column( |
| 104 | sa.ForeignKey(User.id), primary_key=True, init=False |
| 105 | ) |
| 106 | org: sa_orm.Mapped[str] = sa_orm.mapped_column(sa.String, nullable=False) |
| 107 | __mapper_args__ = {"polymorphic_identity": "admin"} |
| 108 | |
| 109 | elif issubclass(db.Model, (sa_orm.DeclarativeBase, sa_orm.DeclarativeBaseNoMeta)): |
| 110 | |
| 111 | class User(db.Model): # type: ignore[no-redef] |
| 112 | __bind_key__ = "a" |
| 113 | id: sa_orm.Mapped[int] = sa_orm.mapped_column(sa.Integer, primary_key=True) |
| 114 | type: sa_orm.Mapped[str] = sa_orm.mapped_column(sa.String, nullable=False) |
| 115 | __mapper_args__ = {"polymorphic_on": type, "polymorphic_identity": "user"} |
| 116 | |
| 117 | class Admin(User): # type: ignore[no-redef] |
| 118 | id: sa_orm.Mapped[int] = sa_orm.mapped_column( |
| 119 | sa.ForeignKey(User.id), primary_key=True |
| 120 | ) |
| 121 | org: sa_orm.Mapped[str] = sa_orm.mapped_column(sa.String, nullable=False) |
| 122 | __mapper_args__ = {"polymorphic_identity": "admin"} |
| 123 | |
| 124 | else: |
| 125 | |
| 126 | class User(db.Model): # type: ignore[no-redef] |
| 127 | __bind_key__ = "a" |
| 128 | id = sa.Column(sa.Integer, primary_key=True) |
| 129 | type = sa.Column(sa.String, nullable=False) |
| 130 | __mapper_args__ = {"polymorphic_on": type, "polymorphic_identity": "user"} |
| 131 | |
| 132 | class Admin(User): # type: ignore[no-redef] |
| 133 | id = sa.Column(sa.ForeignKey(User.id), primary_key=True) # type: ignore[assignment] |
| 134 | org = sa.Column(sa.String, nullable=False) |
| 135 | __mapper_args__ = {"polymorphic_identity": "admin"} |
| 136 | |
| 137 | db.create_all() |
| 138 | db.session.add(Admin(org="pallets")) |
| 139 | db.session.commit() |
| 140 | admin = db.session.execute(db.select(Admin)).scalar_one() |
| 141 | db.session.expire(admin) |
| 142 | assert admin.org == "pallets" |
| 143 |
nothing calls this directly
no test coverage detected
searching dependent graphs…