11"""Mirrors sqlalchemy/test/orm/inheritance/test_manytomany.py"""
22
3- from typing import Optional
4-
53from sqlmodel import Field , Relationship , Session , SQLModel , create_engine
64
75
8-
96# Two jointed table inheritance subclasses (User, Group) linked many to many; both sides of the relationship resolve correctly.
107def test_jti_m2m_subclass_to_subclass ():
118 class UserGroupLink (SQLModel , table = True ):
129 __tablename__ = "prin_user_group_map"
13- user_id : Optional [ int ] = Field (
10+ user_id : int | None = Field (
1411 default = None , foreign_key = "prin_users.id" , primary_key = True
1512 )
16- group_id : Optional [ int ] = Field (
13+ group_id : int | None = Field (
1714 default = None , foreign_key = "prin_groups.id" , primary_key = True
1815 )
1916
2017 class Principal (SQLModel , table = True ):
2118 __tablename__ = "principals"
22- id : Optional [ int ] = Field (default = None , primary_key = True )
19+ id : int | None = Field (default = None , primary_key = True )
2320 name : str
2421 type : str = Field (default = "principal" )
2522
@@ -30,7 +27,7 @@ class Principal(SQLModel, table=True):
3027
3128 class User (Principal , table = True ):
3229 __tablename__ = "prin_users"
33- id : Optional [ int ] = Field (
30+ id : int | None = Field (
3431 default = None , primary_key = True , foreign_key = "principals.id"
3532 )
3633 password : str
@@ -44,7 +41,7 @@ class User(Principal, table=True):
4441
4542 class Group (Principal , table = True ):
4643 __tablename__ = "prin_groups"
47- id : Optional [ int ] = Field (
44+ id : int | None = Field (
4845 default = None , primary_key = True , foreign_key = "principals.id"
4946 )
5047 users : list [User ] = Relationship (
@@ -80,17 +77,17 @@ class Group(Principal, table=True):
8077def test_jti_m2m_get_by_subclass_pk ():
8178 class FooBarLink (SQLModel , table = True ):
8279 __tablename__ = "foo_bar_link"
83- foo_id : Optional [ int ] = Field (
80+ foo_id : int | None = Field (
8481 default = None , foreign_key = "m2m_foo.id" , primary_key = True
8582 )
86- bar_id : Optional [ int ] = Field (
83+ bar_id : int | None = Field (
8784 default = None , foreign_key = "m2m_bar.id" , primary_key = True
8885 )
8986
9087 class Foo (SQLModel , table = True ):
9188 __tablename__ = "m2m_foo"
92- id : Optional [ int ] = Field (default = None , primary_key = True )
93- data : Optional [ str ] = None
89+ id : int | None = Field (default = None , primary_key = True )
90+ data : str | None = None
9491 type : str = Field (default = "foo" )
9592
9693 __mapper_args__ = {
@@ -100,9 +97,7 @@ class Foo(SQLModel, table=True):
10097
10198 class Bar (Foo , table = True ):
10299 __tablename__ = "m2m_bar"
103- id : Optional [int ] = Field (
104- default = None , primary_key = True , foreign_key = "m2m_foo.id"
105- )
100+ id : int | None = Field (default = None , primary_key = True , foreign_key = "m2m_foo.id" )
106101 foos : list [Foo ] = Relationship (link_model = FooBarLink )
107102
108103 __mapper_args__ = {"polymorphic_identity" : "bar" }
@@ -133,26 +128,26 @@ class Bar(Foo, table=True):
133128def test_jti_m2m_three_level ():
134129 class BlubBarLink (SQLModel , table = True ):
135130 __tablename__ = "blub_bar_link"
136- blub_id : Optional [ int ] = Field (
131+ blub_id : int | None = Field (
137132 default = None , foreign_key = "m3_blub.id" , primary_key = True
138133 )
139- bar_id : Optional [ int ] = Field (
134+ bar_id : int | None = Field (
140135 default = None , foreign_key = "m3_bar.id" , primary_key = True
141136 )
142137
143138 class BlubFooLink (SQLModel , table = True ):
144139 __tablename__ = "blub_foo_link"
145- blub_id : Optional [ int ] = Field (
140+ blub_id : int | None = Field (
146141 default = None , foreign_key = "m3_blub.id" , primary_key = True
147142 )
148- foo_id : Optional [ int ] = Field (
143+ foo_id : int | None = Field (
149144 default = None , foreign_key = "m3_foo.id" , primary_key = True
150145 )
151146
152147 class Foo (SQLModel , table = True ):
153148 __tablename__ = "m3_foo"
154- id : Optional [ int ] = Field (default = None , primary_key = True )
155- data : Optional [ str ] = None
149+ id : int | None = Field (default = None , primary_key = True )
150+ data : str | None = None
156151 type : str = Field (default = "foo" )
157152
158153 __mapper_args__ = {
@@ -162,19 +157,15 @@ class Foo(SQLModel, table=True):
162157
163158 class Bar (Foo , table = True ):
164159 __tablename__ = "m3_bar"
165- id : Optional [int ] = Field (
166- default = None , primary_key = True , foreign_key = "m3_foo.id"
167- )
168- bar_data : Optional [str ] = None
160+ id : int | None = Field (default = None , primary_key = True , foreign_key = "m3_foo.id" )
161+ bar_data : str | None = None
169162
170163 __mapper_args__ = {"polymorphic_identity" : "bar" }
171164
172165 class Blub (Bar , table = True ):
173166 __tablename__ = "m3_blub"
174- id : Optional [int ] = Field (
175- default = None , primary_key = True , foreign_key = "m3_bar.id"
176- )
177- blub_data : Optional [str ] = None
167+ id : int | None = Field (default = None , primary_key = True , foreign_key = "m3_bar.id" )
168+ blub_data : str | None = None
178169 bars : list [Bar ] = Relationship (link_model = BlubBarLink )
179170 foos : list [Foo ] = Relationship (link_model = BlubFooLink )
180171
0 commit comments