13
13
ScrollOffsets , HSplit
14
14
from prompt_toolkit .layout .dimension import LayoutDimension as D
15
15
from prompt_toolkit .token import Token
16
+ from prompt_toolkit .validation import ValidationError
17
+
16
18
17
19
from .. import PromptParameterException
18
20
from ..separator import Separator
@@ -30,6 +32,8 @@ def __init__(self, choices, pointer_index, **kwargs):
30
32
self .unselected_sign = kwargs .pop ("unselected_sign" , "\u25cb " )
31
33
self .selected_options = [] # list of names
32
34
self .answered = False
35
+ self .answered_correctly = True
36
+ self .error_message = None
33
37
self ._init_choices (choices )
34
38
super (InquirerControl , self ).__init__ (self ._get_choice_tokens ,
35
39
** kwargs )
@@ -160,6 +164,8 @@ def get_prompt_tokens(cli):
160
164
tokens .append ((Token .Instruction ,
161
165
' (<up>, <down> to move, <space> to select, <a> '
162
166
'to toggle, <i> to invert)' ))
167
+ if not ic .answered_correctly :
168
+ tokens .append ((Token .Error , ' Error: %s' % ic .error_message ))
163
169
return tokens
164
170
165
171
# assemble layout
@@ -234,9 +240,14 @@ def _prev():
234
240
235
241
@manager .registry .add_binding (Keys .Enter , eager = True )
236
242
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 ()
240
251
241
252
return Application (
242
253
layout = layout ,
0 commit comments