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
« 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>
5from fastapi import APIRouter, Depends, HTTPException
6from pydantic import BaseModel
7from sqlalchemy import select
8from sqlalchemy.orm import Session
10from daklib.dbconn import Suite, get_suite
11from dakweb.routers.deps import get_db
13router = APIRouter()
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]
25@router.get("/suites")
26def suites(db: Session = Depends(get_db)) -> list[SuiteResponse]:
27 """Give information about all known suites."""
29 stmt = select(Suite).order_by(Suite.suite_name)
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 ]
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."""
48 so = get_suite(suite, session=db)
49 if so is None:
50 raise HTTPException(status_code=404, detail="Not found")
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 )