Spaces:
Build error
Build error
Validify-testbot-1
/
botbuilder-python
/libraries
/botbuilder-dialogs
/botbuilder
/dialogs
/prompts
/datetime_prompt.py
| # Copyright (c) Microsoft Corporation. All rights reserved. | |
| # Licensed under the MIT License. | |
| from typing import Dict | |
| from recognizers_date_time import recognize_datetime | |
| from botbuilder.core.turn_context import TurnContext | |
| from botbuilder.schema import ActivityTypes | |
| from .datetime_resolution import DateTimeResolution | |
| from .prompt import Prompt | |
| from .prompt_options import PromptOptions | |
| from .prompt_recognizer_result import PromptRecognizerResult | |
| class DateTimePrompt(Prompt): | |
| def __init__( | |
| self, dialog_id: str, validator: object = None, default_locale: str = None | |
| ): | |
| super(DateTimePrompt, 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("DateTimePrompt.on_prompt(): turn_context cannot be None.") | |
| if not options: | |
| raise TypeError("DateTimePrompt.on_prompt(): options cannot be None.") | |
| if is_retry and options.retry_prompt is not None: | |
| await turn_context.send_activity(options.retry_prompt) | |
| else: | |
| if 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( | |
| "DateTimePrompt.on_recognize(): turn_context cannot be None." | |
| ) | |
| result = PromptRecognizerResult() | |
| if turn_context.activity.type == ActivityTypes.message: | |
| # Recognize utterance | |
| utterance = turn_context.activity.text | |
| if not utterance: | |
| return result | |
| # TODO: English constant needs to be ported. | |
| culture = ( | |
| turn_context.activity.locale | |
| if turn_context.activity.locale is not None | |
| else "English" | |
| ) | |
| results = recognize_datetime(utterance, culture) | |
| if results: | |
| result.succeeded = True | |
| result.value = [] | |
| values = results[0].resolution["values"] | |
| for value in values: | |
| result.value.append(self.read_resolution(value)) | |
| return result | |
| def read_resolution(self, resolution: Dict[str, str]) -> DateTimeResolution: | |
| result = DateTimeResolution() | |
| if "timex" in resolution: | |
| result.timex = resolution["timex"] | |
| if "value" in resolution: | |
| result.value = resolution["value"] | |
| if "start" in resolution: | |
| result.start = resolution["start"] | |
| if "end" in resolution: | |
| result.end = resolution["end"] | |
| return result | |