Source code for dakweb.routers.suite
# SPDX-License-Identifier: GPL-2.0-or-later
# © 2026, Ansgar 🙀 <ansgar@debian.org>
# © 2026, Anton Gladky <gladk@debian.org>
from fastapi import APIRouter, Depends, HTTPException
from pydantic import BaseModel
from sqlalchemy import select
from sqlalchemy.orm import Session
from daklib.dbconn import Suite, get_suite
from dakweb.routers.deps import get_db
router = APIRouter()
[docs]
class SuiteResponse(BaseModel):
name: str
codename: str | None
dakname: str | None
archive: str
architectures: list[str]
components: list[str]
[docs]
@router.get("/suites")
def suites(db: Session = Depends(get_db)) -> list[SuiteResponse]:
"""Give information about all known suites."""
stmt = select(Suite).order_by(Suite.suite_name)
return [
SuiteResponse(
name=p.release_suite_output,
codename=p.codename,
dakname=p.suite_name,
archive=p.archive.archive_name,
architectures=[x.arch_string for x in p.architectures],
components=[x.component_name for x in p.components],
)
for p in db.scalars(stmt)
]
[docs]
@router.get("/suite/{suite}")
def suite(suite: str, db: Session = Depends(get_db)) -> SuiteResponse:
"""Give information about a single suite, identified by name or codename."""
so = get_suite(suite, session=db)
if so is None:
raise HTTPException(status_code=404, detail="Not found")
return SuiteResponse(
name=so.release_suite_output,
codename=so.codename,
dakname=so.suite_name,
archive=so.archive.archive_name,
architectures=[x.arch_string for x in so.architectures],
components=[x.component_name for x in so.components],
)