Source code for chap_core.internal_state
import dataclasses
from asyncio import CancelledError
from typing import Optional
from chap_core.worker.interface import Job
[docs]
class Control:
def __init__(self, controls):
self._controls = controls
self._status = "idle"
self._current_control = None
self._is_cancelled = False
@property
def current_control(self):
return self._current_control
[docs]
def cancel(self):
if self._current_control is not None:
self._current_control.cancel()
self._is_cancelled = True
[docs]
def set_status(self, status):
self._current_control = self._controls.get(status, None)
self._status = status
if self._is_cancelled:
raise CancelledError()
[docs]
def get_status(self):
if self._current_control is not None:
return f"{self._status}: {self._current_control.get_status()}"
return self._status
[docs]
def get_progress(self):
if self._current_control is not None:
return self._current_control.get_progress()
return 0
[docs]
@dataclasses.dataclass
class InternalState:
control: Optional[Control]
current_data: dict
model_path: Optional[str] = None
current_job: Job | None = None
[docs]
def is_ready(self):
return self.current_job is None or self.current_job.is_finished