|
from src.hooks.progressListener import ProgressListener |
|
|
|
from typing import Union |
|
|
|
class SubTaskProgressListener(ProgressListener): |
|
""" |
|
A sub task listener that reports the progress of a sub task to a base task listener |
|
Parameters |
|
---------- |
|
base_task_listener : ProgressListener |
|
The base progress listener to accumulate overall progress in. |
|
base_task_total : float |
|
The maximum total progress that will be reported to the base progress listener. |
|
sub_task_start : float |
|
The starting progress of a sub task, in respect to the base progress listener. |
|
sub_task_total : float |
|
The total amount of progress a sub task will report to the base progress listener. |
|
""" |
|
def __init__( |
|
self, |
|
base_task_listener: ProgressListener, |
|
base_task_total: float, |
|
sub_task_start: float, |
|
sub_task_total: float, |
|
): |
|
self.base_task_listener = base_task_listener |
|
self.base_task_total = base_task_total |
|
self.sub_task_start = sub_task_start |
|
self.sub_task_total = sub_task_total |
|
|
|
def on_progress(self, current: Union[int, float], total: Union[int, float]): |
|
sub_task_progress_frac = current / total |
|
sub_task_progress = self.sub_task_start + self.sub_task_total * sub_task_progress_frac |
|
self.base_task_listener.on_progress(sub_task_progress, self.base_task_total) |
|
|
|
def on_finished(self): |
|
self.base_task_listener.on_progress(self.sub_task_start + self.sub_task_total, self.base_task_total) |