103
class ConfirmationUserInterfacePolicy(object):
104
"""Wrapper for a UIFactory that allows or denies all confirmed actions."""
106
def __init__(self, wrapped_ui, default_answer, specific_answers):
107
"""Generate a proxy UI that does no confirmations.
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
113
:param specific_answers: Map from confirmation_id to bool answer.
115
self.wrapped_ui = wrapped_ui
116
self.default_answer = default_answer
117
self.specific_answers = specific_answers
119
def __getattr__(self, name):
120
return getattr(self.wrapped_ui, name)
123
return '%s(%r, %r, %r)' % (
124
self.__class__.__name__,
127
self.specific_answers)
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
135
return self.wrapped_ui.confirm_action(
136
prompt, confirmation_id, prompt_kwargs)
139
103
class UIFactory(object):
140
104
"""UI abstraction.
188
152
self._quiet = state
190
def confirm_action(self, prompt, confirmation_id, prompt_kwargs):
191
"""Seek user confirmation for an action.
193
If the UI is noninteractive, or the user does not want to be asked
194
about this action, True is returned, indicating bzr should just
197
The confirmation id allows the user to configure certain actions to
198
always be confirmed or always denied, and for UIs to specialize the
199
display of particular confirmations.
201
:param prompt: Suggested text to display to the user.
202
:param prompt_kwargs: A dictionary of arguments that can be
203
string-interpolated into the prompt.
204
:param confirmation_id: Unique string identifier for the confirmation.
206
return self.get_boolean(prompt % prompt_kwargs)
208
154
def get_password(self, prompt='', **kwargs):
209
155
"""Prompt the user for a password.
431
377
"without an upgrade path.\n" % (inter.target._format,))
434
class NoninteractiveUIFactory(UIFactory):
435
"""Base class for UIs with no user."""
437
def confirm_action(self, prompt, confirmation_id, prompt_kwargs):
441
return '%s()' % (self.__class__.__name__, )
444
class SilentUIFactory(NoninteractiveUIFactory):
380
class SilentUIFactory(UIFactory):
445
381
"""A UI Factory which never prints anything.
447
383
This is the default UI, if another one is never registered by a program
482
418
def __repr__(self):
483
419
return "%s(%r)" % (self.__class__.__name__, self.responses)
485
def confirm_action(self, prompt, confirmation_id, args):
486
return self.get_boolean(prompt % args)
488
421
def get_boolean(self, prompt):
489
422
return self.responses.pop(0)