mirror of
https://github.com/Stone-Red-Code/dvc.git
synced 2026-11-02 07:18:25 +01:00
queue status: show final experiment name
fix: #8059 1. showing final experiment name in `queue status` for successful tasks. 2. Add a unit test for `celery_queue.status`
This commit is contained in:
committed by
Peter Rowlands (변기호)
parent
306456d453
commit
9180a718c1
@@ -184,9 +184,12 @@ class BaseStashQueue(ABC):
|
|||||||
|
|
||||||
def _format_entry(
|
def _format_entry(
|
||||||
entry: QueueEntry,
|
entry: QueueEntry,
|
||||||
|
exp_result: Optional[ExecutorResult] = None,
|
||||||
status: str = "Unknown",
|
status: str = "Unknown",
|
||||||
) -> Dict[str, Any]:
|
) -> Dict[str, Any]:
|
||||||
name = entry.name
|
name = entry.name
|
||||||
|
if not name and exp_result and exp_result.ref_info:
|
||||||
|
name = exp_result.ref_info.name
|
||||||
# NOTE: We fallback to Unknown status for experiments
|
# NOTE: We fallback to Unknown status for experiments
|
||||||
# generated in prior (incompatible) DVC versions
|
# generated in prior (incompatible) DVC versions
|
||||||
return {
|
return {
|
||||||
@@ -209,8 +212,8 @@ class BaseStashQueue(ABC):
|
|||||||
for queue_entry, _ in self.iter_failed()
|
for queue_entry, _ in self.iter_failed()
|
||||||
)
|
)
|
||||||
result.extend(
|
result.extend(
|
||||||
_format_entry(queue_entry, status="Success")
|
_format_entry(queue_entry, exp_result=exp_result, status="Success")
|
||||||
for queue_entry, _ in self.iter_success()
|
for queue_entry, exp_result in self.iter_success()
|
||||||
)
|
)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|||||||
@@ -145,3 +145,83 @@ def test_queue_iter_done_task(test_queue, mocker, status):
|
|||||||
elif status == "SUCCESS":
|
elif status == "SUCCESS":
|
||||||
with pytest.raises(DvcException):
|
with pytest.raises(DvcException):
|
||||||
assert list(test_queue.iter_success())
|
assert list(test_queue.iter_success())
|
||||||
|
|
||||||
|
|
||||||
|
def test_queue_status(test_queue, scm, mocker):
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
active_entry = mocker.Mock(stash_rev="active")
|
||||||
|
active_entry.name = "foo"
|
||||||
|
queued_entry = mocker.Mock(stash_rev="queued")
|
||||||
|
queued_entry.name = None
|
||||||
|
failed_entry = mocker.Mock(stash_rev="failed")
|
||||||
|
failed_entry.name = "bar"
|
||||||
|
success_entry = mocker.Mock(stash_rev="success")
|
||||||
|
success_entry.name = None
|
||||||
|
success_result = mocker.Mock(ref_info=mocker.Mock())
|
||||||
|
success_result.ref_info.name = "foobar"
|
||||||
|
|
||||||
|
def resolve_commit(rev):
|
||||||
|
if rev == "active":
|
||||||
|
commit_time = datetime(2022, 8, 7).timestamp()
|
||||||
|
elif rev == "queued":
|
||||||
|
commit_time = datetime(2022, 8, 6).timestamp()
|
||||||
|
elif rev == "failed":
|
||||||
|
commit_time = datetime(2022, 8, 5).timestamp()
|
||||||
|
elif rev == "success":
|
||||||
|
commit_time = datetime(2022, 8, 4).timestamp()
|
||||||
|
return mocker.Mock(commit_time=commit_time)
|
||||||
|
|
||||||
|
mocker.patch.object(
|
||||||
|
scm,
|
||||||
|
"resolve_commit",
|
||||||
|
side_effect=mocker.MagicMock(side_effect=resolve_commit),
|
||||||
|
)
|
||||||
|
|
||||||
|
mocker.patch.object(
|
||||||
|
test_queue,
|
||||||
|
"iter_active",
|
||||||
|
return_value=[active_entry],
|
||||||
|
)
|
||||||
|
mocker.patch.object(
|
||||||
|
test_queue,
|
||||||
|
"iter_queued",
|
||||||
|
return_value=[queued_entry],
|
||||||
|
)
|
||||||
|
mocker.patch.object(
|
||||||
|
test_queue,
|
||||||
|
"iter_failed",
|
||||||
|
return_value=[(failed_entry, None)],
|
||||||
|
)
|
||||||
|
mocker.patch.object(
|
||||||
|
test_queue,
|
||||||
|
"iter_success",
|
||||||
|
return_value=[(success_entry, success_result)],
|
||||||
|
)
|
||||||
|
|
||||||
|
assert test_queue.status() == [
|
||||||
|
{
|
||||||
|
"name": "foo",
|
||||||
|
"rev": "active",
|
||||||
|
"status": "Running",
|
||||||
|
"timestamp": datetime(2022, 8, 7, 0, 0, 0),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": None,
|
||||||
|
"rev": "queued",
|
||||||
|
"status": "Queued",
|
||||||
|
"timestamp": datetime(2022, 8, 6, 0, 0, 0),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "bar",
|
||||||
|
"rev": "failed",
|
||||||
|
"status": "Failed",
|
||||||
|
"timestamp": datetime(2022, 8, 5, 0, 0, 0),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "foobar",
|
||||||
|
"rev": "success",
|
||||||
|
"status": "Success",
|
||||||
|
"timestamp": datetime(2022, 8, 4, 0, 0, 0),
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|||||||
Reference in New Issue
Block a user