~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/ui/__init__.py

merge trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
100
100
    return val
101
101
 
102
102
 
 
103
class ConfirmationUserInterfacePolicy(object):
 
104
    """Wrapper for a UIFactory that allows or denies all confirmed actions."""
 
105
 
 
106
    def __init__(self, wrapped_ui, default_answer, specific_answers):
 
107
        """Generate a proxy UI that does no confirmations.
 
108
 
 
109
        :param wrapped_ui: Underlying UIFactory.
 
110
        :param default_answer: Bool for whether requests for
 
111
            confirmation from the user should be noninteractively accepted or
 
112
            denied.
 
113
        :param specific_answers: Map from confirmation_id to bool answer.
 
114
        """
 
115
        self.wrapped_ui = wrapped_ui
 
116
        self.default_answer = default_answer
 
117
        self.specific_answers = specific_answers
 
118
 
 
119
    def __getattr__(self, name):
 
120
        return getattr(self.wrapped_ui, name)
 
121
 
 
122
    def __repr__(self):
 
123
        return '%s(%r, %r, %r)' % (
 
124
            self.__class__.__name__,
 
125
            self.wrapped_ui,
 
126
            self.default_answer, 
 
127
            self.specific_answers)
 
128
 
 
129
    def confirm_action(self, prompt, confirmation_id, prompt_kwargs):
 
130
        if confirmation_id in self.specific_answers:
 
131
            return self.specific_answers[confirmation_id]
 
132
        elif self.default_answer is not None:
 
133
            return self.default_answer
 
134
        else:
 
135
            return self.wrapped_ui.confirm_action(
 
136
                prompt, confirmation_id, prompt_kwargs)
 
137
 
 
138
 
103
139
class UIFactory(object):
104
140
    """UI abstraction.
105
141
 
118
154
            "%(from_format)s to %(to_format)s.\n"
119
155
            "This may take some time. Upgrade the repositories to the "
120
156
            "same format for better performance."
121
 
            )
 
157
            ),
 
158
        recommend_upgrade=("%(current_format_name)s is deprecated "
 
159
            "and a better format is available.\n"
 
160
            "It is recommended that you upgrade by "
 
161
            "running the command\n"
 
162
            "  bzr upgrade %(basedir)s"),
122
163
        )
123
164
 
124
165
    def __init__(self):
151
192
        """
152
193
        self._quiet = state
153
194
 
 
195
    def confirm_action(self, prompt, confirmation_id, prompt_kwargs):
 
196
        """Seek user confirmation for an action.
 
197
 
 
198
        If the UI is noninteractive, or the user does not want to be asked
 
199
        about this action, True is returned, indicating bzr should just
 
200
        proceed.
 
201
 
 
202
        The confirmation id allows the user to configure certain actions to
 
203
        always be confirmed or always denied, and for UIs to specialize the
 
204
        display of particular confirmations.
 
205
 
 
206
        :param prompt: Suggested text to display to the user.
 
207
        :param prompt_kwargs: A dictionary of arguments that can be
 
208
            string-interpolated into the prompt.
 
209
        :param confirmation_id: Unique string identifier for the confirmation.
 
210
        """
 
211
        return self.get_boolean(prompt % prompt_kwargs)
 
212
 
154
213
    def get_password(self, prompt='', **kwargs):
155
214
        """Prompt the user for a password.
156
215
 
289
348
        """
290
349
        return NullProgressView()
291
350
 
292
 
    def recommend_upgrade(self,
293
 
        current_format_name,
294
 
        basedir):
295
 
        # XXX: this should perhaps be in the TextUIFactory and the default can do
296
 
        # nothing
297
 
        #
298
 
        # XXX: Change to show_user_warning - that will accomplish the previous
299
 
        # xxx. -- mbp 2010-02-25
300
 
        trace.warning("%s is deprecated "
301
 
            "and a better format is available.\n"
302
 
            "It is recommended that you upgrade by "
303
 
            "running the command\n"
304
 
            "  bzr upgrade %s",
305
 
            current_format_name,
306
 
            basedir)
 
351
    def recommend_upgrade(self, current_format_name, basedir):
 
352
        """Recommend the user upgrade a control directory.
 
353
 
 
354
        :param current_format_name: Description of the current format
 
355
        :param basedir: Location of the control dir
 
356
        """
 
357
        self.show_user_warning('recommend_upgrade',
 
358
            current_format_name=current_format_name, basedir=basedir)
307
359
 
308
360
    def report_transport_activity(self, transport, byte_count, direction):
309
361
        """Called by transports as they do IO.
377
429
                "without an upgrade path.\n" % (inter.target._format,))
378
430
 
379
431
 
380
 
class SilentUIFactory(UIFactory):
 
432
class NoninteractiveUIFactory(UIFactory):
 
433
    """Base class for UIs with no user."""
 
434
 
 
435
    def confirm_action(self, prompt, confirmation_id, prompt_kwargs):
 
436
        return True
 
437
 
 
438
    def __repr__(self):
 
439
        return '%s()' % (self.__class__.__name__, )
 
440
 
 
441
 
 
442
class SilentUIFactory(NoninteractiveUIFactory):
381
443
    """A UI Factory which never prints anything.
382
444
 
383
445
    This is the default UI, if another one is never registered by a program
418
480
    def __repr__(self):
419
481
        return "%s(%r)" % (self.__class__.__name__, self.responses)
420
482
 
 
483
    def confirm_action(self, prompt, confirmation_id, args):
 
484
        return self.get_boolean(prompt % args)
 
485
 
421
486
    def get_boolean(self, prompt):
422
487
        return self.responses.pop(0)
423
488