Exemple #1
0
    def run(self, conversation: Conversation):
        conversation.flow_position.append(self._id)
        goto_position = conversation.get_first_goto_position(self)
        if goto_position is not None:
            if goto_position == self._id:
                goto_position = conversation.get_first_goto_position(self)
            else:
                raise Exception()
        print("start_folder_runner,_id=%s" % (self._id))
        for index, child in enumerate(self.children):

            if goto_position is None or index >= goto_position:
                conversation.flow_position.append(index)
                if isinstance(child, Output):
                    child.run(conversation)
                elif isinstance(child, Search):
                    child.run(conversation)
                elif isinstance(child, Default):
                    child.run(conversation)
                else:
                    raise NotImplementedError(type(child))

                conversation.flow_position.pop()

        conversation.flow_position.pop()
Exemple #2
0
    def run(self, conversation: Conversation):
        from dialog.elements.goto import Goto
        from dialog.elements.output import Output
        from dialog.elements.action import Action

        handled = False
        conversation.flow_position.append(self._id)
        goto_position = conversation.get_first_goto_position(self)
        if goto_position is not None:
            if goto_position == self._id:
                goto_position = conversation.get_first_goto_position(self)
            else:
                raise Exception()
        if self.grammar.run(conversation):
            for index, child in enumerate(self.children):
                if goto_position is None or index >= goto_position:
                    conversation.flow_position.append(index)
                    if isinstance(child, Action):
                        child.run(conversation)
                    elif isinstance(child, Output):
                        child.run(conversation)
                    elif isinstance(child, Goto):
                        child.run(conversation)
                    else:
                        raise NotImplementedError(type(child))
                    conversation.flow_position.pop()

            handled = True

        conversation.flow_position.pop()
        return handled
Exemple #3
0
    def run(self, conversation: Conversation):
        conversation.flow_position.append(self._id)
        goto_position = conversation.get_first_goto_position(self)
        if goto_position is not None:
            if goto_position == self._id:
                goto_position = conversation.get_first_goto_position(self)
            else:
                raise Exception()

        for index, child in enumerate(self.children):
            if goto_position is None or index >= goto_position:
                conversation.flow_position.append(index)
                if isinstance(child, Prompt):
                    child.run(conversation)
                elif isinstance(child, GetUserInput):
                    child.run(conversation)
                elif isinstance(child, Output):
                    child.run(conversation)
                elif isinstance(child, Goto):
                    child.run(conversation)
                elif isinstance(child, Input):
                    child.run(conversation)
                elif isinstance(child, Action):
                    child.run(conversation)
                else:
                    raise NotImplementedError(child)
                conversation.flow_position.pop()

        conversation.flow_position.pop()
Exemple #4
0
    def run(self, conversation: Conversation):
        from dialog.elements.goto import Goto
        from dialog.elements.output import Output
        from dialog.elements.action import Action

        handled = False
        conversation.flow_position.append(self._id)
        goto_position = conversation.get_first_goto_position(self)
        if goto_position is not None:
            if goto_position == self._id:
                goto_position = conversation.get_first_goto_position(self)
            else:
                raise Exception()
        if self.grammar.run(conversation):
            for index, child in enumerate(self.children):
                if goto_position is None or index >= goto_position:
                    conversation.flow_position.append(index)
                    if isinstance(child, Action):
                        child.run(conversation)
                    elif isinstance(child, Output):
                        child.run(conversation)
                    elif isinstance(child, Goto):
                        child.run(conversation)
                    else:
                        raise NotImplementedError(type(child))
                    conversation.flow_position.pop()

            handled = True

        conversation.flow_position.pop()
        return handled
Exemple #5
0
    def run(self, conversation: Conversation):
        from dialog.elements import Input, Goto, Folder

        goto_position = conversation.get_first_goto_position(self)
        conversation.flow_position.append(self._id)
        if goto_position is None:
            raise GetUserInputException(conversation, self)
        else:
            if goto_position == self._id:
                # so now it needs to look through the possible responses
                goto_position = conversation.get_first_goto_position(self)
            else:
                raise Exception()

            for index, child in enumerate(self.children):
                if goto_position is None or index >= goto_position:
                    conversation.flow_position.append(index)
                    if isinstance(child, Input):
                        # from dialog.runners.input import InputRunner
                        child.run(conversation)
                    elif isinstance(child, Goto):
                        child.run(conversation)
                    elif isinstance(child, Folder):
                        child.run(conversation)
                    else:
                        raise NotImplementedError(type(child))

                    conversation.flow_position.pop()

            conversation.flow_position.pop()
Exemple #6
0
    def run(self, conversation: Conversation):
        conversation.flow_position.append(self._id)
        goto_position = conversation.get_first_goto_position(self)
        if goto_position is not None:
            if goto_position == self._id:
                goto_position = conversation.get_first_goto_position(self)
            else:
                raise Exception()

        for index, child in enumerate(self.children):
            if goto_position is None or index >= goto_position:
                conversation.flow_position.append(index)
                if isinstance(child, Prompt):
                    child.run(conversation)
                elif isinstance(child, GetUserInput):
                    child.run(conversation)
                elif isinstance(child, Output):
                    child.run(conversation)
                elif isinstance(child, Goto):
                    child.run(conversation)
                elif isinstance(child, Input):
                    child.run(conversation)
                elif isinstance(child, Action):
                    child.run(conversation)
                else:
                    raise NotImplementedError(child)
                conversation.flow_position.pop()

        conversation.flow_position.pop()
Exemple #7
0
    def run(self, conversation: Conversation):
        from dialog.elements.action import Action
        from dialog.elements.output import Output
        from dialog.elements.get_user_input import GetUserInput
        from dialog.elements.folder import Folder
        from dialog.elements.search import Search
        from dialog.elements.get_user_input import GetUserInputException

        if conversation.flow_position is not None:
            conversation.goto_position = deque(copy(conversation.flow_position))
        conversation.flow_position = []

        if conversation.flow_goto_position is not None:
            # conversation.goto_position = None
            goto_object = self.ref_ids[conversation.flow_goto_position]
            try:
                goto_object.run(conversation)
            except GetUserInputException as get_user_input:
                return get_user_input
            except GotoException as goto_exception:
                return self.run(conversation)
            pass
            # raise NotImplementedError()

        else:

            try:
                self.flow.run(conversation)
            except GotoException as goto_exception:
                return self.run(conversation)
            except GetUserInputException as get_user_input:
                return get_user_input
Exemple #8
0
    def run(self, conversation: Conversation):
        from dialog.elements import Prompt, GetUserInput, Output, Goto, Action, Input

        conversation.flow_position.append(self._id)
        goto_position = conversation.get_first_goto_position(self)
        if goto_position is not None:
            if goto_position == self._id:
                goto_position = conversation.get_first_goto_position(self)
            else:
                raise Exception()

        search_object = self.dialog.ref_ids[self.ref]
        input_handled = False
        for index, child in enumerate(search_object.children):
            if goto_position is None or index >= goto_position:
                conversation.flow_position.append(index)
                if isinstance(child, Prompt):
                    child.run(conversation)
                elif isinstance(child, GetUserInput):
                    child.run(conversation)
                elif isinstance(child, Output):
                    child.run(conversation)
                elif isinstance(child, Goto):
                    child.run(conversation)
                elif isinstance(child, Action):
                    child.run(conversation)
                elif isinstance(child, Input):
                    if not input_handled:
                        input_handled = child.run(conversation)
                else:
                    raise NotImplementedError(child)
                conversation.flow_position.pop()

        conversation.flow_position.pop()
Exemple #9
0
    def run(self, conversation: Conversation):
        conversation.flow_position.append(self._id)
        goto_position = conversation.get_first_goto_position(self)
        if goto_position is not None:
            if goto_position == self._id:
                goto_position = conversation.get_first_goto_position(self)
            else:
                raise Exception()
        print("start_folder_runner,_id=%s" % (self._id))
        for index, child in enumerate(self.children):

            if goto_position is None or index >= goto_position:
                conversation.flow_position.append(index)
                if isinstance(child, Output):
                    child.run(conversation)
                elif isinstance(child, Search):
                    child.run(conversation)
                elif isinstance(child, Default):
                    child.run(conversation)
                else:
                    raise NotImplementedError(type(child))

                conversation.flow_position.pop()

        conversation.flow_position.pop()
Exemple #10
0
    def run(self, conversation: Conversation):
        from dialog.elements import Input, Goto, Folder

        goto_position = conversation.get_first_goto_position(self)
        conversation.flow_position.append(self._id)
        if goto_position is None:
            raise GetUserInputException(conversation, self)
        else:
            if goto_position == self._id:
                # so now it needs to look through the possible responses
                goto_position = conversation.get_first_goto_position(self)
            else:
                raise Exception()

            for index, child in enumerate(self.children):
                if goto_position is None or index >= goto_position:
                    conversation.flow_position.append(index)
                    if isinstance(child, Input):
                        # from dialog.runners.input import InputRunner
                        child.run(conversation)
                    elif isinstance(child, Goto):
                        child.run(conversation)
                    elif isinstance(child, Folder):
                        child.run(conversation)
                    else:
                        raise NotImplementedError(type(child))

                    conversation.flow_position.pop()

            conversation.flow_position.pop()
Exemple #11
0
    def run(self, conversation: Conversation):
        conversation.flow_position = []
        conversation.flow_goto_position = self.ref
        if self.ref in self.dialog.ref_ids:
            goto_object = self.dialog.ref_ids[self.ref]
            raise GotoException(conversation)

        else:
            raise Exception("can not find,id=%s" % self.ref)
Exemple #12
0
 def test_trailing_match(self):
     conversation = Conversation()
     conversation.user_input = "hi my name is Rob"
     actual = Target.run(
         Mock(), conversation,
         RegExGrammarItem(pattern=r"\w*My name is (\w+)",
                          dynamic_field_assignments=["user_known_as"]))
     self.assertTrue(actual)
     self.assertDictEqual({'user_known_as': 'Rob'},
                          conversation.current_input_context)
Exemple #13
0
    def run(self, conversation: Conversation):
        conversation.flow_position = []
        conversation.flow_goto_position = self.ref
        if self.ref in self.dialog.ref_ids:
            goto_object = self.dialog.ref_ids[self.ref]
            raise GotoException(conversation)


        else:
            raise Exception("can not find,id=%s" % self.ref)
 def test_trailing_match(self):
     conversation = Conversation()
     conversation.user_input = "hi my name is Rob"
     actual = Target.run(
         Mock(),
         conversation,
         RegExGrammarItem(pattern=r"\w*My name is (\w+)", dynamic_field_assignments=["user_known_as"])
     )
     self.assertTrue(actual)
     self.assertDictEqual(
         {'user_known_as': 'Rob'},
         conversation.current_input_context
     )
Exemple #15
0
 def run(self, conversation: Conversation):
     matches = re.findall(self.pattern, conversation.user_input, self.flags)
     if not any(matches):
         return False
     elif any(matches) and self.dynamic_field_assignments is None:
         return True
     elif len(matches) == len(self.dynamic_field_assignments):
         assignments = zip(self.dynamic_field_assignments, matches)
         conversation.current_input_context = {}
         for key, value in assignments:
             conversation.current_input_context[key] = value
         return True
     else:
         return False
Exemple #16
0
 def run(self, conversation: Conversation):
     matches = re.findall(self.pattern, conversation.user_input, self.flags)
     if not any(matches):
         return False
     elif any(matches) and self.dynamic_field_assignments is None:
         return True
     elif len(matches) == len(self.dynamic_field_assignments):
         assignments = zip(self.dynamic_field_assignments, matches)
         conversation.current_input_context = {}
         for key, value in assignments:
             conversation.current_input_context[key] = value
         return True
     else:
         return False
Exemple #17
0
 def run(self, conversation: Conversation):
     # conversation.flow_position.append(flow._id)
     goto_position = conversation.get_first_goto_position(self)
     for index, folder in enumerate(self.folders):
         if goto_position is None or index >= goto_position:
             conversation.flow_position.append(index)
             folder.run(conversation)
             conversation.flow_position.pop()
Exemple #18
0
    def run(self, conversation: Conversation):
        conversation.flow_position.append(self._id)
        goto_position = conversation.get_first_goto_position(self)
        if goto_position is not None:
            if goto_position == self._id:
                goto_position = conversation.get_first_goto_position(self)
            else:
                raise Exception()

        for index, child in enumerate(self.children):
            if goto_position is None or index >= goto_position:
                conversation.flow_position.append(index)
                if isinstance(child, Output):
                    child.run(conversation)
                else:
                    # for now seems important to only have default on here
                    raise NotImplementedError(child)
                conversation.flow_position.pop()

        conversation.flow_position.pop()
Exemple #19
0
 def run(self, conversation: Conversation):
     if self.entity_id not in self.dialog.entity_dict:
         raise Exception()
     entity_grammar = self.dialog.entity_dict[self.entity_id]
     search_term = conversation.user_input.strip().lower()
     if search_term in entity_grammar:
         conversation.current_input_context = {
             self.dynamic_field_assignment: entity_grammar[search_term].value
         }
         return True
     else:
         return False
Exemple #20
0
 def run(self, conversation: Conversation):
     if self.entity_id not in self.dialog.entity_dict:
         raise Exception()
     entity_grammar = self.dialog.entity_dict[self.entity_id]
     search_term = conversation.user_input.strip().lower()
     if search_term in entity_grammar:
         conversation.current_input_context = {
             self.dynamic_field_assignment:
             entity_grammar[search_term].value
         }
         return True
     else:
         return False
Exemple #21
0
from dialog.schema.flow import Flow
from dialog.schema.variables import Variables

dialog = Dialog(
    flow=Flow().create(),
    entities=Entities().create(),
    variables=Variables().create()

    # {
    #     "folder": [
    #         MainFolder.create(),
    #         LibraryFolder.create(),
    #         GlobalFolder.create(),
    #         ConceptFolder.create()
    #     ]
    # }
    # ),
    # Entities().create(),
    # Variables().create()
)

user_input = dialog.entry_point(Conversation())

user_input.conversation.user_input = "My name is Rob"
after_name_input = dialog.entry_point(user_input.conversation)
user_input.conversation.user_input = "Yes"
after_yes_shoes_input = dialog.entry_point(user_input.conversation)
user_input.conversation.user_input = "high heels"
after_style_input = dialog.entry_point(user_input.conversation)
pass