~abentley/bzrtools/bzrtools.dev

« back to all changes in this revision

Viewing changes to progress.py

  • Committer: Aaron Bentley
  • Date: 2005-05-10 19:14:23 UTC
  • Revision ID: abentley@troll-20050510191423-390845176f9359e1
Added spinner progress indicator

Show diffs side-by-side

added added

removed removed

Lines of Context:
47
47
def clear_progress_bar():
48
48
    sys.stderr.write('\r%s\r' % (' '*79))
49
49
 
 
50
def spinner_str(progress, show_text=False):
 
51
    """
 
52
    Produces the string for a textual "spinner" progress indicator
 
53
    :param progress: an object represinting current progress
 
54
    :param show_text: If true, show progress text as well
 
55
    :return: The spinner string
 
56
 
 
57
    >>> spinner_str(Progress("baloons", 0))
 
58
    '|'
 
59
    >>> spinner_str(Progress("baloons", 5))
 
60
    '/'
 
61
    >>> spinner_str(Progress("baloons", 6), show_text=True)
 
62
    '- 6 baloons'
 
63
    """
 
64
    positions = ('|', '/', '-', '\\')
 
65
    text = positions[progress.current % 4]
 
66
    if show_text:
 
67
        text+=" %i %s" % (progress.current, progress.units)
 
68
    return text
 
69
 
 
70
def spinner(progress, show_text=False, output=sys.stderr):
 
71
    """
 
72
    Update a spinner progress indicator on an output
 
73
    :param progress: The progress to display
 
74
    :param show_text: If true, show text as well as spinner
 
75
    :param output: The output to write to
 
76
 
 
77
    >>> spinner(Progress("baloons", 6), show_text=True, output=sys.stdout)
 
78
    \r- 6 baloons
 
79
    """
 
80
    output.write('\r%s' % spinner_str(progress, show_text))
 
81
 
 
82
def run_tests():
 
83
    import doctest
 
84
    result = doctest.testmod()
 
85
    if result[1] > 0:
 
86
        if result[0] == 0:
 
87
            print "All tests passed"
 
88
    else:
 
89
        print "No tests to run"
 
90
if __name__ == "__main__":
 
91
    run_tests()