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

1# SPDX-License-Identifier: GPL-2.0-or-later 

2# © 2026, Ansgar 🙀 <ansgar@debian.org> 

3# © 2026, Anton Gladky <gladk@debian.org> 

4 

5from fastapi import APIRouter, Depends 

6from pydantic import BaseModel 

7from sqlalchemy import select 

8from sqlalchemy.orm import Session 

9 

10from daklib.dbconn import DBBinary, DBSource, MetadataKey, SourceMetadata 

11from dakweb.routers.deps import get_db 

12 

13router = APIRouter() 

14 

15 

16@router.get("/binary/metadata_keys/") 

17def binary_metadata_keys(db: Session = Depends(get_db)) -> list[str]: 

18 """List all possible metadata keys.""" 

19 

20 return [p.key for p in db.scalars(select(MetadataKey))] 

21 

22 

23class BinaryByMetadata(BaseModel): 

24 binary: str 

25 source: str 

26 metadata_value: str 

27 

28 

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.""" 

34 

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 ) 

43 

44 return [ 

45 BinaryByMetadata(binary=p.package, source=p.source, metadata_value=p.value) 

46 for p in db.execute(stmt) 

47 ]