Skip to content

Commit 0944b20

Browse files
authored
Merge pull request #117 from Djkusik/validate_checkbox
Add usage of checkbox answers validator
2 parents b9ba68c + 1910576 commit 0944b20

File tree

1 file changed

+14
-3
lines changed

1 file changed

+14
-3
lines changed

PyInquirer/prompts/checkbox.py

+14-3
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
ScrollOffsets, HSplit
1414
from prompt_toolkit.layout.dimension import LayoutDimension as D
1515
from prompt_toolkit.token import Token
16+
from prompt_toolkit.validation import ValidationError
17+
1618

1719
from .. import PromptParameterException
1820
from ..separator import Separator
@@ -30,6 +32,8 @@ def __init__(self, choices, pointer_index, **kwargs):
3032
self.unselected_sign = kwargs.pop("unselected_sign", "\u25cb")
3133
self.selected_options = [] # list of names
3234
self.answered = False
35+
self.answered_correctly = True
36+
self.error_message = None
3337
self._init_choices(choices)
3438
super(InquirerControl, self).__init__(self._get_choice_tokens,
3539
**kwargs)
@@ -160,6 +164,8 @@ def get_prompt_tokens(cli):
160164
tokens.append((Token.Instruction,
161165
' (<up>, <down> to move, <space> to select, <a> '
162166
'to toggle, <i> to invert)'))
167+
if not ic.answered_correctly:
168+
tokens.append((Token.Error, ' Error: %s' % ic.error_message))
163169
return tokens
164170

165171
# assemble layout
@@ -234,9 +240,14 @@ def _prev():
234240

235241
@manager.registry.add_binding(Keys.Enter, eager=True)
236242
def set_answer(event):
237-
ic.answered = True
238-
# TODO use validator
239-
event.cli.set_return_value(ic.get_selected_values())
243+
try:
244+
validator(ic.get_selected_values())
245+
ic.answered = True
246+
event.cli.set_return_value(ic.get_selected_values())
247+
except ValidationError as e:
248+
ic.error_message = e
249+
ic.answered_correctly = False
250+
event.cli.reset()
240251

241252
return Application(
242253
layout=layout,

0 commit comments

Comments
 (0)