~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/progress.py

  • Committer: Alexander Belchenko
  • Date: 2012-02-29 12:35:23 UTC
  • mto: (6437.23.21 2.5)
  • mto: This revision was merged to the branch mainline in revision 6493.
  • Revision ID: bialix@ukr.net-20120229123523-giercg9s8ck7ufg1
Standalone bzr.exe includes QtTest library from PyQt4 framework that required for QBzr tests. (Alexander Belchenko, #928963)

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
17
 
 
18
17
"""Progress indicators.
19
18
 
20
19
The usual way to use this is via bzrlib.ui.ui_factory.nested_progress_bar which
21
20
will manage a conceptual stack of nested activities.
22
21
"""
23
22
 
 
23
from __future__ import absolute_import
24
24
 
25
 
import sys
26
25
import time
27
26
import os
28
27
 
29
28
 
30
 
from bzrlib.symbol_versioning import (
31
 
    deprecated_in,
32
 
    deprecated_method,
33
 
    )
34
 
 
35
 
 
36
29
def _supports_progress(f):
37
30
    """Detect if we can use pretty progress bars on file F.
38
31
 
152
145
                own_fraction = 0.0
153
146
            return self._parent_task._overall_completion_fraction(own_fraction)
154
147
 
155
 
    @deprecated_method(deprecated_in((2, 1, 0)))
156
 
    def note(self, fmt_string, *args):
157
 
        """Record a note without disrupting the progress bar.
158
 
        
159
 
        Deprecated: use ui_factory.note() instead or bzrlib.trace.  Note that
160
 
        ui_factory.note takes just one string as the argument, not a format
161
 
        string and arguments.
162
 
        """
163
 
        if args:
164
 
            self.ui_factory.note(fmt_string % args)
165
 
        else:
166
 
            self.ui_factory.note(fmt_string)
167
 
 
168
148
    def clear(self):
169
149
        # TODO: deprecate this method; the model object shouldn't be concerned
170
150
        # with whether it's shown or not.  Most callers use this because they
179
159
            self.ui_factory.clear_term()
180
160
 
181
161
 
182
 
# NOTE: This is also deprecated; you should provide a ProgressView instead.
183
 
class _BaseProgressBar(object):
184
 
 
185
 
    def __init__(self,
186
 
                 to_file=None,
187
 
                 show_pct=False,
188
 
                 show_spinner=False,
189
 
                 show_eta=False,
190
 
                 show_bar=True,
191
 
                 show_count=True,
192
 
                 to_messages_file=None,
193
 
                 _stack=None):
194
 
        object.__init__(self)
195
 
        if to_file is None:
196
 
            to_file = sys.stderr
197
 
        if to_messages_file is None:
198
 
            to_messages_file = sys.stdout
199
 
        self.to_file = to_file
200
 
        self.to_messages_file = to_messages_file
201
 
        self.last_msg = None
202
 
        self.last_cnt = None
203
 
        self.last_total = None
204
 
        self.show_pct = show_pct
205
 
        self.show_spinner = show_spinner
206
 
        self.show_eta = show_eta
207
 
        self.show_bar = show_bar
208
 
        self.show_count = show_count
209
 
        self._stack = _stack
210
 
        # seed throttler
211
 
        self.MIN_PAUSE = 0.1 # seconds
212
 
        now = time.time()
213
 
        # starting now
214
 
        self.start_time = now
215
 
        # next update should not throttle
216
 
        self.last_update = now - self.MIN_PAUSE - 1
217
 
 
218
 
    def finished(self):
219
 
        """Return this bar to its progress stack."""
220
 
        self.clear()
221
 
        self._stack.return_pb(self)
222
 
 
223
 
    def note(self, fmt_string, *args, **kwargs):
224
 
        """Record a note without disrupting the progress bar."""
225
 
        self.clear()
226
 
        self.to_messages_file.write(fmt_string % args)
227
 
        self.to_messages_file.write('\n')
228
 
 
229
 
 
230
162
class DummyProgress(object):
231
163
    """Progress-bar standin that does nothing.
232
164
 
248
180
    def clear(self):
249
181
        pass
250
182
 
251
 
    def note(self, fmt_string, *args, **kwargs):
252
 
        """See _BaseProgressBar.note()."""
253
 
 
254
183
    def child_progress(self, **kwargs):
255
184
        return DummyProgress(**kwargs)
256
185