"""Test patterns that can be used for assignment of mapped attributes
after the mapping is complete
"""
from typing import Optional
from sqlalchemy import Column
from sqlalchemy import ForeignKey
from sqlalchemy import inspect
from sqlalchemy import Integer
from sqlalchemy import select
from sqlalchemy import String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import column_property
from sqlalchemy.orm import Mapped
from sqlalchemy.orm import relationship
Base = declarative_base()
class B(Base):
__tablename__ = "b"
id = Column(Integer, primary_key=True)
a_id: int = Column(ForeignKey("a.id"))
data: Mapped[str]
a: Mapped[Optional["A"]]
class A(Base):
__tablename__ = "a"
id = Column(Integer, primary_key=True)
data = Column(String)
bs = relationship(B, uselist=True, back_populates="a")
inspect(B).add_property(
"data",
column_property(select(A.data).where(A.id == B.a_id).scalar_subquery()),
)
inspect(B).add_property("a", relationship(A))
a1 = A()
b1 = B(data="b", a=a1)
B.data.in_(["x", "y"])
B.a.any()