Coverage for tests/test_field_sa_relationship.py: 100%

6 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2025-10-27 00:03 +0000

1from typing import List, Optional 1uvwxyzABCD

2 

3import pytest 1uvwxyzABCD

4from sqlalchemy.orm import relationship 1uvwxyzABCD

5from sqlmodel import Field, Relationship, SQLModel 1uvwxyzABCD

6 

7 

8def test_sa_relationship_no_args() -> None: 1uvwxyzABCD

9 with pytest.raises(RuntimeError): # pragma: no cover 1cdoaepfghq

10 

11 class Team(SQLModel, table=True): 1cdoaepfghq

12 id: Optional[int] = Field(default=None, primary_key=True) 1cdoaepfghq

13 name: str = Field(index=True) 1cdoaepfghq

14 headquarters: str 1cdaefgh

15 

16 heroes: List["Hero"] = Relationship( 1cdoaepfghq

17 back_populates="team", 1cdoaepfghq

18 sa_relationship_args=["Hero"], 1cdoaepfghq

19 sa_relationship=relationship("Hero", back_populates="team"), 1cdoaepfghq

20 ) 

21 

22 class Hero(SQLModel, table=True): 1a

23 id: Optional[int] = Field(default=None, primary_key=True) 

24 name: str = Field(index=True) 

25 secret_name: str 

26 age: Optional[int] = Field(default=None, index=True) 

27 

28 team_id: Optional[int] = Field(default=None, foreign_key="team.id") 

29 team: Optional[Team] = Relationship(back_populates="heroes") 

30 

31 

32def test_sa_relationship_no_kwargs() -> None: 1uvwxyzABCD

33 with pytest.raises(RuntimeError): # pragma: no cover 1ijrbkslmnt

34 

35 class Team(SQLModel, table=True): 1ijrbkslmnt

36 id: Optional[int] = Field(default=None, primary_key=True) 1ijrbkslmnt

37 name: str = Field(index=True) 1ijrbkslmnt

38 headquarters: str 1ijbklmn

39 

40 heroes: List["Hero"] = Relationship( 1ijrbkslmnt

41 back_populates="team", 1ijrbkslmnt

42 sa_relationship_kwargs={"lazy": "selectin"}, 1ijrbkslmnt

43 sa_relationship=relationship("Hero", back_populates="team"), 1ijrbkslmnt

44 ) 

45 

46 class Hero(SQLModel, table=True): 1b

47 id: Optional[int] = Field(default=None, primary_key=True) 

48 name: str = Field(index=True) 

49 secret_name: str 

50 age: Optional[int] = Field(default=None, index=True) 

51 

52 team_id: Optional[int] = Field(default=None, foreign_key="team.id") 

53 team: Optional[Team] = Relationship(back_populates="heroes")