~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/ui/__init__.py

  • Committer: John Arbash Meinel
  • Date: 2007-04-12 21:33:07 UTC
  • mfrom: (2413.4.1 api-doc-builders)
  • mto: This revision was merged to the branch mainline in revision 2566.
  • Revision ID: john@arbash-meinel.com-20070412213307-kuh07cnzaud12wx1
[merge] api-doc-builder and remove the pydoctor build code for now.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005, 2006 Canonical Ltd
 
1
# Copyright (C) 2005, 2006, 2007 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
32
32
 
33
33
from bzrlib.lazy_import import lazy_import
34
34
lazy_import(globals(), """
 
35
import getpass
 
36
 
35
37
from bzrlib import (
36
38
    progress,
 
39
    trace,
37
40
    )
38
41
""")
39
42
 
63
66
        :param kwargs: Arguments which will be expanded into the prompt.
64
67
                       This lets front ends display different things if
65
68
                       they so choose.
66
 
        :return: The password string, return None if the user 
67
 
                 canceled the request.
 
69
 
 
70
        :return: The password string, return None if the user canceled the
 
71
                 request. Note that we do not touch the encoding, users may
 
72
                 have whatever they see fit and the password should be
 
73
                 transported as is.
68
74
        """
69
75
        raise NotImplementedError(self.get_password)
70
 
        
 
76
 
71
77
    def nested_progress_bar(self):
72
78
        """Return a nested progress bar.
73
79
 
92
98
        """
93
99
        raise NotImplementedError(self.get_boolean)
94
100
 
 
101
    def recommend_upgrade(self,
 
102
        current_format_name,
 
103
        basedir):
 
104
        # this should perhaps be in the TextUIFactory and the default can do
 
105
        # nothing
 
106
        trace.warning("%s is deprecated "
 
107
            "and a better format is available.\n"
 
108
            "It is recommended that you upgrade by "
 
109
            "running the command\n"
 
110
            "  bzr upgrade %s",
 
111
            current_format_name,
 
112
            basedir)
95
113
 
 
114
            
96
115
class CLIUIFactory(UIFactory):
97
116
    """Common behaviour for command line UI factories."""
98
117
 
104
123
        self.clear_term()
105
124
        # FIXME: make a regexp and handle case variations as well.
106
125
        while True:
107
 
            self.prompt(prompt)
 
126
            self.prompt(prompt + "? [y/n]: ")
108
127
            line = self.stdin.readline()
109
128
            if line in ('y\n', 'yes\n'):
110
129
                return True
111
130
            if line in ('n\n', 'no\n'):
112
131
                return False
113
132
 
 
133
    def get_non_echoed_password(self, prompt):
 
134
        return getpass.getpass(prompt)
 
135
 
 
136
    def get_password(self, prompt='', **kwargs):
 
137
        """Prompt the user for a password.
 
138
 
 
139
        :param prompt: The prompt to present the user
 
140
        :param kwargs: Arguments which will be expanded into the prompt.
 
141
                       This lets front ends display different things if
 
142
                       they so choose.
 
143
        :return: The password string, return None if the user 
 
144
                 canceled the request.
 
145
        """
 
146
        prompt += ': '
 
147
        prompt = (prompt % kwargs).encode(sys.stdout.encoding, 'replace')
 
148
        # There's currently no way to say 'i decline to enter a password'
 
149
        # as opposed to 'my password is empty' -- does it matter?
 
150
        return self.get_non_echoed_password(prompt)
 
151
 
114
152
    def prompt(self, prompt):
115
153
        """Emit prompt on the CLI."""
116
154
 
138
176
    def clear_term(self):
139
177
        pass
140
178
 
 
179
    def recommend_upgrade(self, *args):
 
180
        pass
 
181
 
141
182
 
142
183
def clear_decorator(func, *args, **kwargs):
143
184
    """Decorator that clears the term"""