Spaces:
Build error
Build error
Validify-testbot-1
/
botbuilder-python
/libraries
/botbuilder-dialogs
/botbuilder
/dialogs
/prompts
/number_prompt.py
| # Copyright (c) Microsoft Corporation. All rights reserved. | |
| # Licensed under the MIT License. | |
| from typing import Callable, Dict | |
| from recognizers_number import recognize_number | |
| from recognizers_text import Culture, ModelResult | |
| from babel.numbers import parse_decimal | |
| from botbuilder.core.turn_context import TurnContext | |
| from botbuilder.schema import ActivityTypes | |
| from .prompt import Prompt, PromptValidatorContext | |
| from .prompt_options import PromptOptions | |
| from .prompt_recognizer_result import PromptRecognizerResult | |
| class NumberPrompt(Prompt): | |
| # TODO: PromptValidator needs to be fixed | |
| # Does not accept answer as intended (times out) | |
| def __init__( | |
| self, | |
| dialog_id: str, | |
| validator: Callable[[PromptValidatorContext], bool] = None, | |
| default_locale: str = None, | |
| ): | |
| super(NumberPrompt, self).__init__(dialog_id, validator) | |
| self.default_locale = default_locale | |
| async def on_prompt( | |
| self, | |
| turn_context: TurnContext, | |
| state: Dict[str, object], | |
| options: PromptOptions, | |
| is_retry: bool, | |
| ): | |
| if not turn_context: | |
| raise TypeError("NumberPrompt.on_prompt(): turn_context cannot be None.") | |
| if not options: | |
| raise TypeError("NumberPrompt.on_prompt(): options cannot be None.") | |
| if is_retry and options.retry_prompt is not None: | |
| await turn_context.send_activity(options.retry_prompt) | |
| elif options.prompt is not None: | |
| await turn_context.send_activity(options.prompt) | |
| async def on_recognize( | |
| self, | |
| turn_context: TurnContext, | |
| state: Dict[str, object], | |
| options: PromptOptions, | |
| ) -> PromptRecognizerResult: | |
| if not turn_context: | |
| raise TypeError("NumberPrompt.on_recognize(): turn_context cannot be None.") | |
| result = PromptRecognizerResult() | |
| if turn_context.activity.type == ActivityTypes.message: | |
| utterance = turn_context.activity.text | |
| if not utterance: | |
| return result | |
| culture = self._get_culture(turn_context) | |
| results: [ModelResult] = recognize_number(utterance, culture) | |
| if results: | |
| result.succeeded = True | |
| result.value = parse_decimal( | |
| results[0].resolution["value"], locale=culture.replace("-", "_") | |
| ) | |
| return result | |
| def _get_culture(self, turn_context: TurnContext): | |
| culture = ( | |
| turn_context.activity.locale | |
| if turn_context.activity.locale | |
| else self.default_locale | |
| ) | |
| if not culture: | |
| culture = Culture.English | |
| return culture | |