/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/ui/text.py

  • Committer: John Arbash Meinel
  • Date: 2006-07-18 18:57:54 UTC
  • mto: This revision was merged to the branch mainline in revision 1868.
  • Revision ID: john@arbash-meinel.com-20060718185754-4007745748e28db9
Commit timestamp restricted to 1ms precision.

The old code would restrict to 1s resolution if the timestamp was
supplied, while it preserved full resolution if the timestamp was
auto generated. Now both paths preserve only 1ms resolution.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright (C) 2005 Canonical Ltd
 
2
 
 
3
# This program is free software; you can redistribute it and/or modify
 
4
# it under the terms of the GNU General Public License as published by
 
5
# the Free Software Foundation; either version 2 of the License, or
 
6
# (at your option) any later version.
 
7
 
 
8
# This program is distributed in the hope that it will be useful,
 
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
11
# GNU General Public License for more details.
 
12
 
 
13
# You should have received a copy of the GNU General Public License
 
14
# along with this program; if not, write to the Free Software
 
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
16
 
 
17
 
 
18
 
 
19
"""Text UI, write output to the console.
 
20
"""
 
21
 
 
22
import getpass
 
23
import sys
 
24
 
 
25
import bzrlib.progress
 
26
from bzrlib.symbol_versioning import (deprecated_method, 
 
27
        zero_eight)
 
28
from bzrlib.ui import CLIUIFactory
 
29
 
 
30
 
 
31
class TextUIFactory(CLIUIFactory):
 
32
    """A UI factory for Text user interefaces."""
 
33
 
 
34
    def __init__(self,
 
35
                 bar_type=None,
 
36
                 stdout=None,
 
37
                 stderr=None):
 
38
        """Create a TextUIFactory.
 
39
 
 
40
        :param bar_type: The type of progress bar to create. It defaults to 
 
41
                         letting the bzrlib.progress.ProgressBar factory auto
 
42
                         select.
 
43
        """
 
44
        super(TextUIFactory, self).__init__()
 
45
        self._bar_type = bar_type
 
46
        if stdout is None:
 
47
            self.stdout = sys.stdout
 
48
        else:
 
49
            self.stdout = stdout
 
50
        if stderr is None:
 
51
            self.stderr = sys.stderr
 
52
        else:
 
53
            self.stderr = stderr
 
54
 
 
55
    def prompt(self, prompt):
 
56
        """Emit prompt on the CLI."""
 
57
        self.stdout.write(prompt + "? [y/n]:")
 
58
        
 
59
    @deprecated_method(zero_eight)
 
60
    def progress_bar(self):
 
61
        """See UIFactory.nested_progress_bar()."""
 
62
        # this in turn is abstract, and creates either a tty or dots
 
63
        # bar depending on what we think of the terminal
 
64
        return bzrlib.progress.ProgressBar()
 
65
 
 
66
    def get_password(self, prompt='', **kwargs):
 
67
        """Prompt the user for a password.
 
68
 
 
69
        :param prompt: The prompt to present the user
 
70
        :param kwargs: Arguments which will be expanded into the prompt.
 
71
                       This lets front ends display different things if
 
72
                       they so choose.
 
73
        :return: The password string, return None if the user 
 
74
                 canceled the request.
 
75
        """
 
76
        prompt = (prompt % kwargs).encode(sys.stdout.encoding, 'replace')
 
77
        prompt += ': '
 
78
        try:
 
79
            return getpass.getpass(prompt)
 
80
        except KeyboardInterrupt:
 
81
            return None
 
82
 
 
83
    def nested_progress_bar(self):
 
84
        """Return a nested progress bar.
 
85
        
 
86
        The actual bar type returned depends on the progress module which
 
87
        may return a tty or dots bar depending on the terminal.
 
88
        """
 
89
        if self._progress_bar_stack is None:
 
90
            self._progress_bar_stack = bzrlib.progress.ProgressBarStack(
 
91
                klass=self._bar_type)
 
92
        return self._progress_bar_stack.get_nested()
 
93
 
 
94
    def clear_term(self):
 
95
        """Prepare the terminal for output.
 
96
 
 
97
        This will, clear any progress bars, and leave the cursor at the
 
98
        leftmost position."""
 
99
        if self._progress_bar_stack is None:
 
100
            return
 
101
        overall_pb = self._progress_bar_stack.bottom()
 
102
        if overall_pb is not None:
 
103
            overall_pb.clear()