summaryrefslogtreecommitdiff
path: root/virtinst/progress.py
blob: b195b281cf9d5c002eea47c0579f5195662790e8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#
# Copyright 2021 Red Hat, Inc.
#
# This work is licensed under the GNU GPLv2 or later.
# See the COPYING file in the top-level directory.
#

import sys

from . import _progresspriv


class Meter:
    """
    Meter class that hides the internals of the backend implementation
    from virtinst and friends
    """
    # Used by virt-manager subclass
    format_number = _progresspriv.format_number
    format_time = _progresspriv.format_time

    def __init__(self, quiet=False):
        self._text = None
        self._size = None
        self._total_read = 0
        if quiet:
            self._meter = _progresspriv.BaseMeter()
        else:
            self._meter = _progresspriv.TextMeter(output=sys.stdout)

    def start(self, text, size):
        self._text = text
        self._size = size
        self._total_read = 0
        self._meter.start(text, size)

    def update(self, new_total):
        self._total_read = new_total
        self._meter.update(new_total)

    def end(self):
        self._meter.end()


def make_meter(quiet):
    return Meter(quiet=quiet)


def ensure_meter(meter):
    if meter:
        return meter
    return make_meter(quiet=True)