Coverage for src/worblehat/queries/bookcase_shelf.py: 100%

14 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-09-25 22:25 +0000

1from sqlalchemy import select 

2from sqlalchemy.orm import Session 

3 

4from worblehat.models import Bookcase, BookcaseShelf 

5 

6 

7def find_bookcase_shelf( 

8 sql_session: Session, 

9 bookcase: Bookcase, 

10 column: int, 

11 row: int, 

12) -> BookcaseShelf | None: 

13 return sql_session.scalars( 

14 select(BookcaseShelf).where( 

15 BookcaseShelf.bookcase == bookcase, 

16 BookcaseShelf.column == column, 

17 BookcaseShelf.row == row, 

18 ), 

19 ).one_or_none() 

20 

21 

22def list_bookcase_shelfs_ordered(sql_session: Session) -> list[BookcaseShelf]: 

23 return list( 

24 sql_session.scalars( 

25 select(BookcaseShelf) 

26 .join(Bookcase) 

27 .order_by( 

28 Bookcase.name, 

29 BookcaseShelf.column, 

30 BookcaseShelf.row, 

31 ), 

32 ).all(), 

33 ) 

34 

35 

36def list_bookcase_shelf_positions( 

37 sql_session: Session, 

38 bookcase: Bookcase, 

39 column: int | None = None, 

40 row: int | None = None, 

41) -> list[tuple[int, int]]: 

42 query = select(BookcaseShelf.row, BookcaseShelf.column).where( 

43 BookcaseShelf.bookcase == bookcase, 

44 ) 

45 if column is not None: 

46 query = query.where(BookcaseShelf.column == column) 

47 if row is not None: 

48 query = query.where(BookcaseShelf.row == row) 

49 return [tuple(r) for r in sql_session.execute(query)]