Allow searching builds by status

This commit is contained in:
Stéphane Bidoul 2021-11-28 16:29:31 +01:00
parent af7fb32a5e
commit 24fa4bebd1
No known key found for this signature in database
GPG key ID: BCAB2555446B5B92
3 changed files with 18 additions and 3 deletions

View file

@ -85,10 +85,11 @@ async def builds(
target_branch: Optional[str] = None,
branch: Optional[str] = None,
pr: Optional[int] = None,
status: Optional[models.BuildStatus] = None,
) -> list[models.Build]:
return list(
controller.db.search(
repo=repo, target_branch=target_branch, branch=branch, pr=pr
repo=repo, target_branch=target_branch, branch=branch, pr=pr, status=status
)
)

View file

@ -45,7 +45,7 @@ class BuildsDb:
commit_info = CommitInfo(**{k: row[k] for k in commit_info_fields})
return Build(
commit_info=commit_info,
**{k: row[k] for k in row.keys() if k not in commit_info_fields}
**{k: row[k] for k in row.keys() if k not in commit_info_fields},
)
def reset(self) -> None:
@ -224,11 +224,13 @@ class BuildsDb:
def search(
self,
*,
repo: str | None = None,
target_branch: str | None = None,
branch: str | None = None,
pr: int | None = None,
name: str | None = None,
status: BuildStatus | None = None,
sort: SortOrder = SortOrder.desc,
) -> Iterator[Build]:
query = "SELECT * FROM builds "
@ -250,6 +252,9 @@ class BuildsDb:
if name:
where.append("name=?")
params.append(name)
if status:
where.append("status=?")
params.append(status.value)
if where:
query += "WHERE " + " AND ".join(where)
if sort == SortOrder.desc:

View file

@ -90,7 +90,7 @@ def test_search() -> None:
db.add(build1 := _make_build(name="b1", repo="oca/repo1"))
db.add(_make_build(name="b2", repo="oca/repo2"))
assert len(list(db.search())) == 2
assert list(db.search("oca/repo1")) == [build1]
assert list(db.search(repo="oca/repo1")) == [build1]
def test_search_by_branch_and_pr() -> None:
@ -105,6 +105,15 @@ def test_search_by_branch_and_pr() -> None:
assert list(db.search(pr=1)) == [build2]
def test_search_by_status() -> None:
db = BuildsDb()
db.add(build1 := _make_build(name="b1", status=BuildStatus.failed))
db.add(build2 := _make_build(name="b2", status=BuildStatus.started))
assert list(db.search(status=BuildStatus.failed)) == [build1]
assert list(db.search(status=BuildStatus.started)) == [build2]
assert list(db.search(status=BuildStatus.stopped)) == []
def test_search_sort() -> None:
db = BuildsDb()
db.add(build1 := _make_build(name="b1", target_branch="15.0", pr=None))