Source code for dakweb.routers.binary

# SPDX-License-Identifier:  GPL-2.0-or-later
# © 2026, Ansgar 🙀 <ansgar@debian.org>
# © 2026, Anton Gladky <gladk@debian.org>

from fastapi import APIRouter, Depends
from pydantic import BaseModel
from sqlalchemy import select
from sqlalchemy.orm import Session

from daklib.dbconn import DBBinary, DBSource, MetadataKey, SourceMetadata
from dakweb.routers.deps import get_db

router = APIRouter()


[docs] @router.get("/binary/metadata_keys/") def binary_metadata_keys(db: Session = Depends(get_db)) -> list[str]: """List all possible metadata keys.""" return [p.key for p in db.scalars(select(MetadataKey))]
[docs] class BinaryByMetadata(BaseModel): binary: str source: str metadata_value: str
[docs] @router.get("/binary/by_metadata/{key}") def binary_by_metadata( key: str, db: Session = Depends(get_db) ) -> list[BinaryByMetadata]: """Find all Debian binary packages which have the specified metadata set in their source package.""" stmt = ( select(DBBinary.package, DBSource.source, SourceMetadata.value) .join(DBSource, DBBinary.source_id == DBSource.source_id) .join(SourceMetadata) .join(MetadataKey) .where(MetadataKey.key == key) .group_by(DBBinary.package, DBSource.source, SourceMetadata.value) ) return [ BinaryByMetadata(binary=p.package, source=p.source, metadata_value=p.value) for p in db.execute(stmt) ]