Coverage for dakweb/routers/binary.py: 100%
18 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
6from pydantic import BaseModel
7from sqlalchemy import select
8from sqlalchemy.orm import Session
10from daklib.dbconn import DBBinary, DBSource, MetadataKey, SourceMetadata
11from dakweb.routers.deps import get_db
13router = APIRouter()
16@router.get("/binary/metadata_keys/")
17def binary_metadata_keys(db: Session = Depends(get_db)) -> list[str]:
18 """List all possible metadata keys."""
20 return [p.key for p in db.scalars(select(MetadataKey))]
23class BinaryByMetadata(BaseModel):
24 binary: str
25 source: str
26 metadata_value: str
29@router.get("/binary/by_metadata/{key}")
30def binary_by_metadata(
31 key: str, db: Session = Depends(get_db)
32) -> list[BinaryByMetadata]:
33 """Find all Debian binary packages which have the specified metadata set in their source package."""
35 stmt = (
36 select(DBBinary.package, DBSource.source, SourceMetadata.value)
37 .join(DBSource, DBBinary.source_id == DBSource.source_id)
38 .join(SourceMetadata)
39 .join(MetadataKey)
40 .where(MetadataKey.key == key)
41 .group_by(DBBinary.package, DBSource.source, SourceMetadata.value)
42 )
44 return [
45 BinaryByMetadata(binary=p.package, source=p.source, metadata_value=p.value)
46 for p in db.execute(stmt)
47 ]