From 24fa4bebd153e626191618abe75dd35d33fb317b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Bidoul?= Date: Sun, 28 Nov 2021 16:29:31 +0100 Subject: [PATCH] Allow searching builds by status --- src/runboat/api.py | 3 ++- src/runboat/db.py | 7 ++++++- tests/test_db.py | 11 ++++++++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/runboat/api.py b/src/runboat/api.py index 4bcd06a..afb6129 100644 --- a/src/runboat/api.py +++ b/src/runboat/api.py @@ -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 ) ) diff --git a/src/runboat/db.py b/src/runboat/db.py index 8ec7f03..80be144 100644 --- a/src/runboat/db.py +++ b/src/runboat/db.py @@ -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: diff --git a/tests/test_db.py b/tests/test_db.py index 52da226..a58bcc2 100644 --- a/tests/test_db.py +++ b/tests/test_db.py @@ -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))