浏览代码

fix: update block_at logic

trgiangdo 7 月之前
父节点
当前提交
3a7442078c
共有 2 个文件被更改,包括 26 次插入24 次删除
  1. 10 8
      taipy/core/job/job.py
  2. 16 16
      tests/core/job/test_job.py

+ 10 - 8
taipy/core/job/job.py

@@ -148,7 +148,7 @@ class Job(_Entity, _Labeled):
 
     @property
     @_self_reload(_MANAGER_NAME)
-    def submitted_time(self) -> datetime:
+    def submitted_at(self) -> datetime:
         """Get the date time when the job was submitted.
 
         Returns:
@@ -158,7 +158,7 @@ class Job(_Entity, _Labeled):
 
     @property
     @_self_reload(_MANAGER_NAME)
-    def run_time(self) -> Optional[datetime]:
+    def run_at(self) -> Optional[datetime]:
         """Get the date time when the job was run.
 
         Returns:
@@ -169,7 +169,7 @@ class Job(_Entity, _Labeled):
 
     @property
     @_self_reload(_MANAGER_NAME)
-    def finished_time(self) -> Optional[datetime]:
+    def finished_at(self) -> Optional[datetime]:
         """Get the date time when the job was finished.
 
         Returns:
@@ -206,7 +206,7 @@ class Job(_Entity, _Labeled):
             return None
 
         if self.is_finished():
-            return (self.finished_time - self._status_change_records[Status.RUNNING.name]).total_seconds()
+            return (self.finished_at - self._status_change_records[Status.RUNNING.name]).total_seconds()
 
         return (datetime.now() - self._status_change_records[Status.RUNNING.name]).total_seconds()
 
@@ -245,13 +245,15 @@ class Job(_Entity, _Labeled):
         if Status.BLOCKED.name not in self._status_change_records:
             return None
 
-        if self.is_finished():
-            return (self.finished_time - self._status_change_records[Status.BLOCKED.name]).total_seconds()
-        if self.is_running():
+        if Status.PENDING.name in self._status_change_records:
             return (
-                self._status_change_records[Status.RUNNING.name] - self._status_change_records[Status.BLOCKED.name]
+                self._status_change_records[Status.PENDING.name] - self._status_change_records[Status.BLOCKED.name]
             ).total_seconds()
+        if self.is_finished():
+            return (self.finished_at - self._status_change_records[Status.BLOCKED.name]).total_seconds()
 
+        # If pending time is not recorded, and the job is not finished, the only possible status left is blocked
+        # which means the current status is blocked.
         return (datetime.now() - self._status_change_records[Status.BLOCKED.name]).total_seconds()
 
     @property  # type: ignore

+ 16 - 16
tests/core/job/test_job.py

@@ -335,53 +335,53 @@ def test_status_records(job_id):
     _JobManager._set(job_1)
 
     assert job_1._status_change_records == {"SUBMITTED": datetime(2024, 9, 25, 13, 30, 30)}
-    assert job_1.submitted_time == datetime(2024, 9, 25, 13, 30, 30)
+    assert job_1.submitted_at == datetime(2024, 9, 25, 13, 30, 30)
     assert job_1.execution_duration is None
 
     with freezegun.freeze_time("2024-09-25 13:35:30"):
-        job_1.pending()
+        job_1.blocked()
     assert job_1._status_change_records == {
         "SUBMITTED": datetime(2024, 9, 25, 13, 30, 30),
-        "PENDING": datetime(2024, 9, 25, 13, 35, 30),
+        "BLOCKED": datetime(2024, 9, 25, 13, 35, 30),
     }
     assert job_1.execution_duration is None
     with freezegun.freeze_time("2024-09-25 13:36:00"):
-        assert job_1.pending_duration == 30
+        assert job_1.blocked_duration == 30  # = 13:36:00 - 13:35:30
 
     with freezegun.freeze_time("2024-09-25 13:40:30"):
-        job_1.blocked()
+        job_1.pending()
     assert job_1._status_change_records == {
         "SUBMITTED": datetime(2024, 9, 25, 13, 30, 30),
-        "PENDING": datetime(2024, 9, 25, 13, 35, 30),
-        "BLOCKED": datetime(2024, 9, 25, 13, 40, 30),
+        "BLOCKED": datetime(2024, 9, 25, 13, 35, 30),
+        "PENDING": datetime(2024, 9, 25, 13, 40, 30),
     }
     assert job_1.execution_duration is None
     with freezegun.freeze_time("2024-09-25 13:41:00"):
-        assert job_1.blocked_duration == 30
+        assert job_1.pending_duration == 30  # = 13:41:00 - 13:40:30
 
     with freezegun.freeze_time("2024-09-25 13:50:30"):
         job_1.running()
     assert job_1._status_change_records == {
         "SUBMITTED": datetime(2024, 9, 25, 13, 30, 30),
-        "PENDING": datetime(2024, 9, 25, 13, 35, 30),
-        "BLOCKED": datetime(2024, 9, 25, 13, 40, 30),
+        "BLOCKED": datetime(2024, 9, 25, 13, 35, 30),
+        "PENDING": datetime(2024, 9, 25, 13, 40, 30),
         "RUNNING": datetime(2024, 9, 25, 13, 50, 30),
     }
-    assert job_1.run_time == datetime(2024, 9, 25, 13, 50, 30)
-    assert job_1.pending_duration == 900
-    assert job_1.blocked_duration == 600
+    assert job_1.run_at == datetime(2024, 9, 25, 13, 50, 30)
+    assert job_1.blocked_duration == 300  # = 13:40:30 - 13:35:30
+    assert job_1.pending_duration == 600  # = 13:50:30 - 13:40:30
     assert job_1.execution_duration > 0
 
     with freezegun.freeze_time("2024-09-25 13:56:35"):
         job_1.completed()
     assert job_1._status_change_records == {
         "SUBMITTED": datetime(2024, 9, 25, 13, 30, 30),
-        "PENDING": datetime(2024, 9, 25, 13, 35, 30),
-        "BLOCKED": datetime(2024, 9, 25, 13, 40, 30),
+        "BLOCKED": datetime(2024, 9, 25, 13, 35, 30),
+        "PENDING": datetime(2024, 9, 25, 13, 40, 30),
         "RUNNING": datetime(2024, 9, 25, 13, 50, 30),
         "COMPLETED": datetime(2024, 9, 25, 13, 56, 35),
     }
-    assert job_1.execution_duration == 365
+    assert job_1.execution_duration == 365  # = 13:56:35 - 13:50:30
 
 
 def test_is_deletable():