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 | |