Example #1
0
class Monitor:
    def __init__(self, title="Monitor", log=False) -> None:
        """Monitor allows you to monitor the progress of what is happenening inside your application


        Args:
            title (str, optional): The Title of this Monitor (Is the Panels Title). Defaults to "Monitor".
            progress (bool, optional): Do you want to monitor the progress of assignments and reservations? Defaults to False.
        """
        self.columns = Table.grid(expand=True)
        self.columns.add_column()
        self.log = log
        self.panel = Panel(self.columns, title=title)
        self.live = Live(self.panel, refresh_per_second=4, console=console)

    def addRow(self, renderable: ConsoleRenderable):
        self.columns.add_row(renderable)

    def __aenter__(self):
        '''Convenience Method'''
        return self.__aenter__()

    def __aexit__(self, *args, **kwargs):
        self.__exit__(*args, **kwargs)

    def __enter__(self):
        current_monitor.set(self)
        self.live.__enter__()
        return self

    def __exit__(self, *args, **kwargs):
        self.live.__exit__(*args, **kwargs)
        current_monitor.set(None)
Example #2
0
class MultiProgress:
    """Track progress of multiple processes, plus overall combined progress"""
    def __init__(
        self,
        totals: Dict[str, int],
        total_progress: Progress = None,
        job_progress: Progress = None,
        task_description: str = 'Loading',
    ):
        self.total_progress = total_progress or _get_progress()
        self.total_task = self.total_progress.add_task('[cyan]Total',
                                                       total=sum(
                                                           totals.values()))
        self.job_progress = job_progress or _get_progress()
        self.job_task = self.job_progress.add_task('[cyan]File ')

        self.table = Table.grid()
        self.table.add_row(self.total_progress)
        self.table.add_row(self.job_progress)
        self.task_description = task_description
        self.totals = totals
        self.live = Live(self.table, refresh_per_second=10)

    def __enter__(self):
        self.live.__enter__()
        return self

    def __exit__(self, *args):
        self.total_progress.tasks[0].completed = self.total_progress.tasks[
            0].total
        self.job_progress.tasks[0].completed = self.job_progress.tasks[0].total
        self.live.__exit__(*args)

    def start_job(self, name: PathOrStr):
        if isinstance(name, Path):
            name = _fname(name)
        self.job_progress.update(
            self.job_task,
            completed=0,
            total=self.totals[str(name)],
        )
        self.job_progress.log(
            f'[cyan]{self.task_description} [white]{name}[cyan]...')

    def advance(self, advance: int = 1):
        self.total_progress.advance(self.total_task, advance)
        self.job_progress.advance(self.job_task, advance)