Coverage for dakweb/routers/suite.py: 100%

24 statements  

« prev     ^ index     » next       coverage.py v7.6.0, created at 2026-08-03 16:46 +0000

1# SPDX-License-Identifier: GPL-2.0-or-later 

2# © 2026, Ansgar 🙀 <ansgar@debian.org> 

3# © 2026, Anton Gladky <gladk@debian.org> 

4 

5from fastapi import APIRouter, Depends, HTTPException 

6from pydantic import BaseModel 

7from sqlalchemy import select 

8from sqlalchemy.orm import Session 

9 

10from daklib.dbconn import Suite, get_suite 

11from dakweb.routers.deps import get_db 

12 

13router = APIRouter() 

14 

15 

16class SuiteResponse(BaseModel): 

17 name: str 

18 codename: str | None 

19 dakname: str | None 

20 archive: str 

21 architectures: list[str] 

22 components: list[str] 

23 

24 

25@router.get("/suites") 

26def suites(db: Session = Depends(get_db)) -> list[SuiteResponse]: 

27 """Give information about all known suites.""" 

28 

29 stmt = select(Suite).order_by(Suite.suite_name) 

30 

31 return [ 

32 SuiteResponse( 

33 name=p.release_suite_output, 

34 codename=p.codename, 

35 dakname=p.suite_name, 

36 archive=p.archive.archive_name, 

37 architectures=[x.arch_string for x in p.architectures], 

38 components=[x.component_name for x in p.components], 

39 ) 

40 for p in db.scalars(stmt) 

41 ] 

42 

43 

44@router.get("/suite/{suite}") 

45def suite(suite: str, db: Session = Depends(get_db)) -> SuiteResponse: 

46 """Give information about a single suite, identified by name or codename.""" 

47 

48 so = get_suite(suite, session=db) 

49 if so is None: 

50 raise HTTPException(status_code=404, detail="Not found") 

51 

52 return SuiteResponse( 

53 name=so.release_suite_output, 

54 codename=so.codename, 

55 dakname=so.suite_name, 

56 archive=so.archive.archive_name, 

57 architectures=[x.arch_string for x in so.architectures], 

58 components=[x.component_name for x in so.components], 

59 )