~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/ui/__init__.py

  • Committer: Vincent Ladeuil
  • Date: 2007-02-21 14:46:06 UTC
  • mto: (2326.1.1 jam-integration)
  • mto: This revision was merged to the branch mainline in revision 2327.
  • Revision ID: v.ladeuil+lp@free.fr-20070221144606-qoy01pue1p187j3b
Provide a better implementation for testing passwords.

* bzrlib/ui/__init__.py:
(UIFactory.get_login): Deleted.
(CLIUIFactory.get_non_echoed_password): New method allowing
overriding.

* bzrlib/tests/__init__.py:
(TestUIFactory.get_non_echoed_password): Allows password testing
 without worrying about echo echo.

* bzrlib/tests/__init__.py:
(TestUIFactory): Moved from bzrlib/tests/blackbox/__init__.py
(FakeStdin): Deleted.
(TestCase.run_bzr_captured): Set and reuse ui.ui_factory.stdin.

* bzrlib/ui/text.py:
(TextUIFactory.get_login): Deleted.
(TextUIFactory.get_password): Moved to CLIUIFactory.

* bzrlib/tests/test_ui.py:
(UITests): Delete get_login tests.
(FakeTextUIFactory): Deleted. Better implementation in
TestUIFactory.

* bzrlib/tests/blackbox/__init__.py:
(TestUIFactory): Moved to bzrlib/tests/__init__.py.

Show diffs side-by-side

added added

removed removed

Lines of Context:
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,
37
39
    )
56
58
        """See UIFactory.nested_progress_bar()."""
57
59
        raise NotImplementedError(self.progress_bar)
58
60
 
59
 
    def get_login(self, prompt='', **kwargs):
60
 
        """Prompt the user for a login (generally on a remote host).
61
 
 
62
 
        :param prompt: The prompt to present the user
63
 
        :param kwargs: Arguments which will be expanded into the prompt.
64
 
                       This lets front ends display different things if
65
 
                       they so choose.
66
 
 
67
 
        :return: The user string, return None if the user canceled the
68
 
                 request. Note that we do not touch the encoding, users may
69
 
                 have whatever they see fit and the login should be
70
 
                 transported as is. 
71
 
        """
72
 
        raise NotImplementedError(self.get_login)
73
 
 
74
61
    def get_password(self, prompt='', **kwargs):
75
62
        """Prompt the user for a password.
76
63
 
129
116
            if line in ('n\n', 'no\n'):
130
117
                return False
131
118
 
 
119
    def get_non_echoed_password(self, prompt):
 
120
        return getpass.getpass(prompt)
 
121
 
 
122
    def get_password(self, prompt='', **kwargs):
 
123
        """Prompt the user for a password.
 
124
 
 
125
        :param prompt: The prompt to present the user
 
126
        :param kwargs: Arguments which will be expanded into the prompt.
 
127
                       This lets front ends display different things if
 
128
                       they so choose.
 
129
        :return: The password string, return None if the user 
 
130
                 canceled the request.
 
131
        """
 
132
        prompt += ': '
 
133
        prompt = (prompt % kwargs).encode(sys.stdout.encoding, 'replace')
 
134
        # There's currently no way to say 'i decline to enter a password'
 
135
        # as opposed to 'my password is empty' -- does it matter?
 
136
        return self.get_non_echoed_password(prompt)
 
137
 
132
138
    def prompt(self, prompt):
133
139
        """Emit prompt on the CLI."""
134
140
 
144
150
        """See UIFactory.nested_progress_bar()."""
145
151
        return progress.DummyProgress()
146
152
 
147
 
    def get_login(self, prompt='', **kwargs):
148
 
        return None
149
 
 
150
153
    def get_password(self, prompt='', **kwargs):
151
154
        return None
152
155