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]
@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)
]