コード例 #1
0
ファイル: test_get.py プロジェクト: Freiza/program-y
    def test_global_get(self):
        root = TemplateNode()
        self.assertIsNotNone(root)
        self.assertIsNotNone(root.children)
        self.assertEqual(len(root.children), 0)

        node = TemplateGetNode()
        node.name = TemplateWordNode("name")
        node.local = False
        node.append(TemplateWordNode("Fred"))
        self.assertIsNotNone(node)

        root.append(node)
        self.assertEqual(len(root.children), 1)

        conversation = self._client_context.bot.get_conversation(self._client_context)
        self.assertIsNotNone(conversation)
        question = Question.create_from_text(self._client_context.brain.tokenizer, "Hello")
        conversation.record_dialog(question)
        self.assertIsNotNone(conversation.current_question())
        conversation.set_property("name", "keith")

        result = root.resolve(self._client_context)
        self.assertIsNotNone(result)
        self.assertEqual("keith", result)
コード例 #2
0
    def test_tuples_string(self):
        root = TemplateNode()
        self.assertIsNotNone(root)
        self.assertIsNotNone(root.children)
        self.assertEqual(len(root.children), 0)

        select = TemplateWordNode("Hello")
        self.assertIsNotNone(select)

        node = TemplateGetNode()
        node.name = TemplateWordNode("?x ?y")
        node.tuples = select

        root.append(node)
        self.assertEqual(len(root.children), 1)

        self.assertEqual("[GET [Tuples] - ([WORD]?x ?y)]", node.to_string())

        xml = root.xml_tree(self._client_context)
        self.assertIsNotNone(xml)
        xml_str = ET.tostring(xml, "utf-8").decode("utf-8")
        self.assertEqual('<template><get var="?x ?y">Hello</get></template>',
                         xml_str)

        result = root.resolve_to_string(self._client_context)
コード例 #3
0
ファイル: test_get.py プロジェクト: Freiza/program-y
    def test_local_no_value(self):
        root = TemplateNode()
        self.assertIsNotNone(root)
        self.assertIsNotNone(root.children)
        self.assertEqual(len(root.children), 0)

        node = TemplateGetNode()
        node.name = TemplateWordNode("name")
        node.local = True
        node.append(TemplateWordNode("Fred"))
        self.assertIsNotNone(node)

        root.append(node)
        self.assertEqual(len(root.children), 1)

        self._client_context.brain.properties.add_property("default-get", "unknown")

        conversation = self._client_context.bot.get_conversation(self._client_context)
        self.assertIsNotNone(conversation)
        question = Question.create_from_text(self._client_context.brain.tokenizer, "Hello")
        conversation.record_dialog(question)

        result = root.resolve(self._client_context)
        self.assertIsNotNone(result)
        self.assertEqual("unknown", result)
コード例 #4
0
ファイル: condition.py プロジェクト: Freiza/program-y
 def get_condition_variable_value(self, client_context, var_type, name):
     if var_type == TemplateConditionVariable.GLOBAL:
         return TemplateGetNode.get_property_value(client_context, False, name)
     elif var_type == TemplateConditionVariable.LOCAL:
         return TemplateGetNode.get_property_value(client_context, True, name)
     elif var_type == TemplateConditionVariable.BOT:
         return TemplateBotNode.get_bot_variable(client_context, name)
     else:
         return"unknown"
コード例 #5
0
ファイル: test_get.py プロジェクト: ksenia1997/program-y
    def test_to_xml_global_get(self):
        root = TemplateNode()
        node = TemplateGetNode()
        node.name = TemplateWordNode("name")
        node.local = False
        root.append(node)

        xml = root.xml_tree(self._client_context)
        self.assertIsNotNone(xml)
        xml_str = ET.tostring(xml, "utf-8").decode("utf-8")
        self.assertEqual('<template><get name="name" /></template>', xml_str)
コード例 #6
0
ファイル: test_get.py プロジェクト: Freiza/program-y
    def test_to_xml_local_get(self):
        root = TemplateNode()
        node = TemplateGetNode()
        node.name = TemplateWordNode("name")
        node.local = True
        root.append(node)

        xml = root.xml_tree(self._client_context)
        self.assertIsNotNone(xml)
        xml_str = ET.tostring(xml, "utf-8").decode("utf-8")
        self.assertEqual('<template><get var="name" /></template>', xml_str)
コード例 #7
0
 def get_condition_variable_value(self, client_context, var_type, name):
     if var_type == TemplateConditionVariable.GLOBAL:
         return TemplateGetNode.get_property_value(client_context, False,
                                                   name)
     elif var_type == TemplateConditionVariable.LOCAL:
         return TemplateGetNode.get_property_value(client_context, True,
                                                   name)
     elif var_type == TemplateConditionVariable.BOT:
         return TemplateBotNode.get_bot_variable(client_context, name)
     else:
         return "unknown"
コード例 #8
0
    def test_to_xml_local_get(self):
        root = TemplateNode()
        node = TemplateGetNode()
        node.name = TemplateWordNode("name")
        node.local = True
        root.append(node)

        xml = root.xml_tree(self.bot, self.clientid)
        self.assertIsNotNone(xml)
        xml_str = ET.tostring(xml, "utf-8").decode("utf-8")
        self.assertEqual('<template><get var="name" /></template>', xml_str)
コード例 #9
0
    def test_to_xml_typedata_get(self):
        root = TemplateNode()
        node = TemplateGetNode()
        node.name = TemplateWordNode("name")
        node.property_type = "data"
        root.append(node)

        xml = root.xml_tree(self._client_context)
        self.assertIsNotNone(xml)
        xml_str = ET.tostring(xml, "utf-8").decode("utf-8")
        self.assertEqual('<template><get data="name" /></template>', xml_str)
コード例 #10
0
ファイル: graph.py プロジェクト: Doshmaku/program-y
    def parse_get_expression(self, expression, branch):

        get_node = TemplateGetNode()
        branch.children.append(get_node)

        name_found = False
        var_found = False

        if 'name' in expression.attrib:
            node = TemplateNode()
            name_node = TemplateWordNode(expression.attrib['name'])
            node.append(name_node)
            get_node.local = False
            name_found = True
            get_node.name = node

        if 'var' in expression.attrib:
            node = TemplateNode()
            var_node = TemplateWordNode(expression.attrib['var'])
            node.append(var_node)
            get_node.local = True
            var_found = True
            get_node.name = node

        for child in expression:

            if child.tag == 'name':
                node = TemplateNode()

                self.parse_text(self.get_text_from_element(child), node)
                for sub_child in child:
                    self.parse_tag_expression(sub_child, node)
                    self.parse_text(self.get_text_from_element(child), node)

                get_node.name = node
                get_node.local = False
                name_found = True

            elif child.tag == 'var':
                node = TemplateNode()

                self.parse_text(self.get_text_from_element(child), node)
                for sub_child in child:
                    self.parse_tag_expression(sub_child, node)
                    self.parse_text(self.get_text_from_element(child), node)

                get_node.name = node
                get_node.local = True
                var_found = True

            else:
                raise ParserException("Error, invalid get", xml_element=expression)

        if name_found is True and var_found is True:
            raise ParserException("Error, get node has both name AND var values", xml_element=expression)
コード例 #11
0
ファイル: set.py プロジェクト: vowtk0123/cotoba-agent-oss
    def resolve_to_string(self, client_context):

        conversation = client_context.bot.get_conversation(client_context)
        name = self.name.resolve(client_context)
        value = self.resolve_children(client_context)

        if self.property_type == 'var':
            YLogger.debug(client_context, "[%s] resolved to var: [%s] => [%s]",
                          self.to_string(), name, value)
            conversation.current_question().set_property(name, value)
        elif self.property_type == 'data':
            YLogger.debug(client_context,
                          "[%s] resolved to data: [%s] => [%s]",
                          self.to_string(), name, value)
            conversation.set_data_property(name, value)
        elif self.property_type == 'name':
            YLogger.debug(client_context,
                          "[%s] resolved to name: [%s] => [%s]",
                          self.to_string(), name, value)
            value = conversation.set_property(name, value)

        YLogger.debug(client_context, "[%s] resolved to [%s]",
                      self.to_string(), value)

        if value == '':
            value = TemplateGetNode.get_default_value(client_context)
        return value
コード例 #12
0
    def execute(self, client_context, data):
        YLogger.debug(client_context, "Properties Admin - [%s]", data)

        properties = ""

        splits = data.split()
        if splits[0] == 'GET':

            if splits[1] == 'BOT':
                properties = TemplateBotNode.get_bot_variable(
                    client_context, splits[2])

            elif splits[1] == "USER":
                if splits[2].upper() == 'NAME':
                    properties = TemplateGetNode.get_property_value(
                        client_context, 'name', splits[3])
                elif splits[2].upper() == 'DATA':
                    properties = TemplateGetNode.get_property_value(
                        client_context, 'data', splits[3])
                elif splits[2].upper() == 'VAR':
                    properties = TemplateGetNode.get_property_value(
                        client_context, 'var', splits[3])

        elif splits[0] == 'BOT':
            properties += "Properties:<br /><ul>"
            for pair in client_context.brain.properties.pairs:
                properties += "<li>%s = %s</li>" % (pair[0], pair[1])
            properties += "</ul>"
            properties += "<br />"

        elif splits[0] == "USER":
            if client_context.bot.has_conversation(client_context):
                conversation = client_context.bot.get_conversation(
                    client_context)

                properties += "Properties:<br /><ul>"
                for name, value in conversation.properties.items():
                    properties += "<li>%s = %s</li>" % (name, value)
                properties += "</ul>"
                properties += "<br />"

            else:
                properties += "No conversation currently available"

        return properties
コード例 #13
0
ファイル: test_get.py プロジェクト: Freiza/program-y
    def test_global_no_name(self):
        root = TemplateNode()
        self.assertIsNotNone(root)
        self.assertIsNotNone(root.children)
        self.assertEqual(len(root.children), 0)

        node = TemplateGetNode()
        node.append(TemplateWordNode("Fred"))
        self.assertIsNotNone(node)
        self.assertEqual("[GET [Global] - None]", node.to_string())

        root.append(node)
        self.assertEqual(len(root.children), 1)

        self._client_context.brain.properties.add_property("default-get", "unknown")

        result = root.resolve(self._client_context)
        self.assertIsNotNone(result)
        self.assertEqual("", result)
コード例 #14
0
    def test_global_no_name(self):
        root = TemplateNode()
        self.assertIsNotNone(root)
        self.assertIsNotNone(root.children)
        self.assertEqual(len(root.children), 0)

        node = TemplateGetNode()
        node.append(TemplateWordNode("Fred"))
        self.assertIsNotNone(node)
        self.assertEqual("[GET [Global] - None]", node.to_string())

        root.append(node)
        self.assertEqual(len(root.children), 1)

        self.bot.brain.properties.add_property("default-get", "unknown")

        result = root.resolve(self.bot, self.clientid)
        self.assertIsNotNone(result)
        self.assertEqual("", result)
コード例 #15
0
    def test_typevar_no_value(self):
        root = TemplateNode()
        self.assertIsNotNone(root)
        self.assertIsNotNone(root.children)
        self.assertEqual(len(root.children), 0)

        node = TemplateGetNode()
        node.name = TemplateWordNode("name")
        node.property_type = "var"
        node.append(TemplateWordNode("Fred"))
        self.assertIsNotNone(node)

        root.append(node)
        self.assertEqual(len(root.children), 1)

        self._client_context.brain.properties.add_property(
            "default-get", "unknown")

        conversation = self._client_context.bot.get_conversation(
            self._client_context)
        self.assertIsNotNone(conversation)
        question = Question.create_from_text(
            self._client_context, "Hello",
            self._client_context.bot.sentence_splitter)
        conversation.record_dialog(question)

        result = root.resolve(self._client_context)
        self.assertIsNotNone(result)
        self.assertEqual("unknown", result)
コード例 #16
0
    def test_global_get(self):
        root = TemplateNode()
        self.assertIsNotNone(root)
        self.assertIsNotNone(root.children)
        self.assertEqual(len(root.children), 0)

        node = TemplateGetNode()
        node.name = TemplateWordNode("name")
        node.local = False
        node.append(TemplateWordNode("Fred"))
        self.assertIsNotNone(node)

        root.append(node)
        self.assertEqual(len(root.children), 1)

        conversation = self.bot.get_conversation(self.clientid)
        self.assertIsNotNone(conversation)
        question = Question.create_from_text("Hello")
        conversation.record_dialog(question)
        self.assertIsNotNone(conversation.current_question())
        conversation.set_property("name", "keith")

        result = root.resolve(self.bot, self.clientid)
        self.assertIsNotNone(result)
        self.assertEqual("keith", result)
コード例 #17
0
    def test_local_no_value(self):
        root = TemplateNode()
        self.assertIsNotNone(root)
        self.assertIsNotNone(root.children)
        self.assertEqual(len(root.children), 0)

        node = TemplateGetNode()
        node.name = TemplateWordNode("name")
        node.local = True
        node.append(TemplateWordNode("Fred"))
        self.assertIsNotNone(node)

        root.append(node)
        self.assertEqual(len(root.children), 1)

        self.bot.brain.properties.add_property("default-get", "unknown")

        conversation = self.bot.get_conversation(self.clientid)
        self.assertIsNotNone(conversation)
        question = Question.create_from_text("Hello")
        conversation.record_dialog(question)

        result = root.resolve(self.bot, self.clientid)
        self.assertIsNotNone(result)
        self.assertEqual("unknown", result)
コード例 #18
0
    def test_typevar_get(self):
        root = TemplateNode()
        self.assertIsNotNone(root)
        self.assertIsNotNone(root.children)
        self.assertEqual(len(root.children), 0)

        node = TemplateGetNode()
        node.name = TemplateWordNode("name")
        node.property_type = "var"
        node.append(TemplateWordNode("Fred"))
        self.assertIsNotNone(node)

        root.append(node)
        self.assertEqual(len(root.children), 1)

        conversation = self._client_context.bot.get_conversation(
            self._client_context)
        self.assertIsNotNone(conversation)
        question = Question.create_from_text(
            self._client_context, "Hello",
            self._client_context.bot.sentence_splitter)
        conversation.record_dialog(question)
        self.assertIsNotNone(conversation.current_question())
        question.set_property("name", "keith")

        result = root.resolve(self._client_context)
        self.assertIsNotNone(result)
        self.assertEqual("keith", result)
コード例 #19
0
ファイル: test_get.py プロジェクト: darylfung96/program-y
    def test_tuples(self):
        root = TemplateNode()
        self.assertIsNotNone(root)
        self.assertIsNotNone(root.children)
        self.assertEqual(len(root.children), 0)

        select = TemplateSelectNode()
        self.assertIsNotNone(select)

        node = TemplateGetNode()
        node.name = TemplateWordNode("?x ?y")
        node.tuples = select

        root.append(node)
        self.assertEqual(len(root.children), 1)

        self.assertEqual("[GET [Tuples] - ([WORD]?x ?y)]", node.to_string())

        xml = root.xml_tree(self.bot, self.clientid)
        self.assertIsNotNone(xml)
        xml_str = ET.tostring(xml, "utf-8").decode("utf-8")
        self.assertEqual('<template><get var="?x ?y"><select><vars /></select></get></template>', xml_str)
コード例 #20
0
ファイル: test_get.py プロジェクト: Freiza/program-y
    def test_tuples(self):
        root = TemplateNode()
        self.assertIsNotNone(root)
        self.assertIsNotNone(root.children)
        self.assertEqual(len(root.children), 0)

        select = TemplateSelectNode()
        self.assertIsNotNone(select)

        node = TemplateGetNode()
        node.name = TemplateWordNode("?x ?y")
        node.tuples = select

        root.append(node)
        self.assertEqual(len(root.children), 1)

        self.assertEqual("[GET [Tuples] - ([WORD]?x ?y)]", node.to_string())

        xml = root.xml_tree(self._client_context)
        self.assertIsNotNone(xml)
        xml_str = ET.tostring(xml, "utf-8").decode("utf-8")
        self.assertEqual('<template><get var="?x ?y"><select /></get></template>', xml_str)
コード例 #21
0
ファイル: first.py プロジェクト: vowtk0123/cotoba-agent-oss
    def resolve_to_string(self, client_context):
        result = self.resolve_children_to_string(client_context)
        resolved = TemplateGetNode.get_default_value(client_context)
        if result != "":
            try:
                data = json.loads(result)
                if isinstance(data, list):
                    if len(data) > 0:
                        resolved = json.dumps(data[0])
                else:
                    raise Exception("Not what I wanted")
            except Exception:
                words = client_context.brain.tokenizer.texts_to_words(result)
                if len(words) > 0:
                    resolved = words[0]

        YLogger.debug(client_context, "[%s] resolved to [%s]", self.to_string(), resolved)

        return resolved
コード例 #22
0
ファイル: test_get.py プロジェクト: ksenia1997/program-y
    def test_global_get_no_value(self):
        root = TemplateNode()
        self.assertIsNotNone(root)
        self.assertIsNotNone(root.children)
        self.assertEqual(len(root.children), 0)

        node = TemplateGetNode()
        node.name = TemplateWordNode("name")
        node.local = False
        node.append(TemplateWordNode("Fred"))
        self.assertIsNotNone(node)
        self.assertEqual("[GET [Global] - [WORD]name]", node.to_string())

        root.append(node)
        self.assertEqual(len(root.children), 1)

        self._client_context.brain.properties.add_property("default-get", "unknown")

        result = root.resolve(self._client_context)
        self.assertIsNotNone(result)
        self.assertEqual("unknown", result)
コード例 #23
0
    def test_unknown_from_config(self):
        root = TemplateNode()
        self.assertIsNotNone(root)
        self.assertIsNotNone(root.children)
        self.assertEqual(len(root.children), 0)

        node = TemplateGetNode()
        node.name = TemplateWordNode("name")
        node.property_type = "name"
        node.append(TemplateWordNode("Fred"))
        self.assertIsNotNone(node)
        self.assertEqual("[GET [name] - [WORD]name]", node.to_string())

        root.append(node)
        self.assertEqual(len(root.children), 1)

        self._client_context.bot.brain.configuration.defaults._default_get = None

        result = root.resolve(self._client_context)
        self.assertIsNotNone(result)
        self.assertEqual("unknown", result)
コード例 #24
0
    def execute(self, bot, clientid, data):
        if logging.getLogger().isEnabledFor(logging.DEBUG):
            logging.debug("Properties Admin - [%s]", data)

        properties = ""

        splits = data.split()
        if splits[0] == 'GET':

            if splits[1] == 'BOT':
                properties = TemplateBotNode.get_bot_variable(bot, clientid, splits[2])

            elif splits[1] == "USER":
                local = bool(splits[2].upper == 'LOCAL')
                properties = TemplateGetNode.get_property_value(bot, clientid, local, splits[3])

        elif splits[0] == 'BOT':
            properties += "Properties:<br /><ul>"
            for pair in bot.brain.properties.pairs:
                properties += "<li>%s = %s</li>"%(pair[0], pair[1])
            properties += "</ul>"
            properties += "<br />"

        elif splits[0] == "USER":
            if bot.has_conversation(clientid):
                conversation = bot.conversation(clientid)

                properties += "Properties:<br /><ul>"
                for name, value in conversation.properties.items():
                    properties += "<li>%s = %s</li>"%(name, value)
                properties += "</ul>"
                properties += "<br />"

            else:
                properties += "No conversation currently available"

        return properties
コード例 #25
0
ファイル: properties.py プロジェクト: Freiza/program-y
    def execute(self, client_context, data):
        YLogger.debug(client_context, "Properties Admin - [%s]", data)

        properties = ""

        splits = data.split()
        if splits[0] == 'GET':

            if splits[1] == 'BOT':
                properties = TemplateBotNode.get_bot_variable(client_context, splits[2])

            elif splits[1] == "USER":
                local = bool(splits[2].upper == 'LOCAL')
                properties = TemplateGetNode.get_property_value(client_context, local, splits[3])

        elif splits[0] == 'BOT':
            properties += "Properties:<br /><ul>"
            for pair in client_context.brain.properties.pairs:
                properties += "<li>%s = %s</li>"%(pair[0], pair[1])
            properties += "</ul>"
            properties += "<br />"

        elif splits[0] == "USER":
            if client_context.bot.has_conversation(client_context):
                conversation = client_context.bot.conversation(client_context)

                properties += "Properties:<br /><ul>"
                for name, value in conversation.properties.items():
                    properties += "<li>%s = %s</li>"%(name, value)
                properties += "</ul>"
                properties += "<br />"

            else:
                properties += "No conversation currently available"

        return properties
コード例 #26
0
ファイル: test_get.py プロジェクト: ystanwar/program-y
    def test_global_get_no_value(self):
        root = TemplateNode()
        self.assertIsNotNone(root)
        self.assertIsNotNone(root.children)
        self.assertEqual(len(root.children), 0)

        node = TemplateGetNode()
        node.name = TemplateWordNode("name")
        node.local = False
        node.append(TemplateWordNode("Fred"))
        self.assertIsNotNone(node)

        root.append(node)
        self.assertEqual(len(root.children), 1)

        self.bot.brain.properties.add_property("default-get", "unknown")

        result = root.resolve(self.bot, self.clientid)
        self.assertIsNotNone(result)
        self.assertEqual("unknown", result)
コード例 #27
0
    def test_typename_no_name(self):
        root = TemplateNode()
        self.assertIsNotNone(root)
        self.assertIsNotNone(root.children)
        self.assertEqual(len(root.children), 0)

        node = TemplateGetNode()
        node.append(TemplateWordNode("Fred"))
        node.property_type = "name"
        self.assertIsNotNone(node)
        self.assertEqual("[GET [name] - None]", node.to_string())

        root.append(node)
        self.assertEqual(len(root.children), 1)

        self._client_context.brain.properties.add_property(
            "default-get", "unknown")

        with self.assertRaises(Exception):
            root.resolve(self._client_context)
コード例 #28
0
ファイル: nluslot.py プロジェクト: vowtk0123/cotoba-agent-oss
    def resolve_to_string(self, client_context):
        resolved = ""
        conversation = client_context.bot.get_conversation(client_context)
        slotName = self._slotName.resolve(client_context)
        itemName = self._itemName.resolve(client_context)
        try:
            slotIndex = int(self._index.resolve(client_context))
        except Exception:
            slotIndex = 0

        slots = None
        try:
            value = conversation.current_question().property(
                "__SYSTEM_NLUDATA__")
            json_dict = json.loads(value)
            slots = json_dict["slots"]
        except Exception:
            YLogger.error(
                self, "TemplateNluSlotNode failed to load __SYSTEM_NLUDATA__")
            return resolved

        slotsKeyName = "slot"

        slotKeys = [slot.get(slotsKeyName) for slot in slots]
        if itemName == "count":
            if slotName == "*":
                resolved = str(len(slotKeys))
            else:
                resolved = str(slotKeys.count(slotName))

            YLogger.debug(client_context, "nluslot [%s] resolved to [%s]",
                          itemName, resolved)
            return resolved

        index = None
        try:
            if slotName == "*":
                index = 0
                if slotIndex != 0:
                    index = slotIndex
            else:
                if slotIndex != 0:
                    slotCounter = 0
                    targetCounter = 0
                    for name in slotKeys:
                        if name == slotName:
                            if targetCounter == slotIndex:
                                index = slotCounter
                                break
                            targetCounter += 1
                        slotCounter += 1
                else:
                    index = slotKeys.index(slotName)
        except Exception:
            YLogger.debug(client_context, "nluslot non search keys:%s",
                          slotName)

        if index is not None:
            YLogger.debug(client_context, "nluintent index[%s]", index)
            try:
                if itemName in slots[index]:
                    resolved = str(slots[index].get(itemName))
            except Exception:
                YLogger.debug(client_context, "nluslot non search item:%s",
                              itemName)

        if resolved == '':
            YLogger.debug(client_context, "nluslot failed slot=[%s] item=[%s]",
                          slotName, itemName)
            resolved = TemplateGetNode.get_default_value(client_context)

        YLogger.debug(client_context, "nluslot [%s] resolved to [%s:%s]",
                      slotName, itemName, resolved)

        return resolved
コード例 #29
0
    def resolve_to_string(self, client_context):
        resolved = ""
        conversation = client_context.bot.get_conversation(client_context)
        intentName = self._intentName.resolve(client_context)
        itemName = self._itemName.resolve(client_context)
        try:
            intentIndex = int(self._index.resolve(client_context))
        except Exception:
            intentIndex = 0

        intents = None
        try:
            value = conversation.current_question().property("__SYSTEM_NLUDATA__")
            json_dict = json.loads(value)
            intents = json_dict["intents"]
        except Exception:
            YLogger.error(self, "TemplateNluintentNode failed to load __SYSTEM_NLUDATA__")
            return resolved

        intentsKeyName = "intent"
        intentsKey = [intent.get(intentsKeyName) for intent in intents]
        if itemName == "count":
            if intentName == "*":
                resolved = str(len(intentsKey))
            else:
                resolved = str(intentsKey.count(intentName))

            YLogger.debug(client_context, "nluintent [%s] resolved to [%s]", itemName, resolved)
            return resolved

        index = None
        try:
            if intentName == "*":
                index = 0
                if intentIndex != 0:
                    index = intentIndex
            else:
                if intentIndex != 0:
                    intentCounter = 0
                    counter = 0
                    for name in intentsKey:
                        if name == intentName:
                            if counter == intentIndex:
                                index = intentCounter
                            counter += 1
                        intentCounter += 1
                else:
                    index = intentsKey.index(intentName)
        except Exception:
            YLogger.debug(client_context, "nluintent non search keys:%s", intentName)

        if index is not None:
            YLogger.debug(client_context, "nluintent index[%s]", index)
            try:
                if itemName in intents[index]:
                    resolved = str(intents[index].get(itemName))
            except Exception:
                YLogger.debug(client_context, "nluintent non search item:%s", itemName)

        if resolved == '':
            YLogger.debug(client_context, "nluintent  failed intent=[%s] item=[%s]", intentName, itemName)
            resolved = TemplateGetNode.get_default_value(client_context)

        YLogger.debug(client_context, "nluintent  [%s] resolved to [%s:%s]", intentName, itemName, resolved)

        return resolved
コード例 #30
0
 def test_get_tuples_invalid_json(self):
     node = TemplateGetNode()
     node.tuples = TemplateWordNode('"1", "2", "3"')
     self.assertEquals([], node._get_tuples(self._client_context))
コード例 #31
0
 def test_default_value_properties(self):
     self._client_context.bot.brain.properties.add_property(
         "default_get", "test123")
     self.assertEqual(
         "test123", TemplateGetNode.get_default_value(self._client_context))
コード例 #32
0
 def __init__(self):
     TemplateGetNode.__init__(self)
コード例 #33
0
    def resolve_to_string(self, client_context):
        resolved = ""
        conversation = client_context.bot.get_conversation(client_context)
        slotName = self._slotName.resolve(client_context)
        itemName = self._itemName.resolve(client_context)
        try:
            slotIndex = int(self._index.resolve(client_context))
        except Exception:
            slotIndex = 0

        try:
            if self._varName is None:
                value = conversation.current_question().property(
                    "__SYSTEM_NLUDATA__")
                if value is None:
                    YLogger.error(
                        self, "TemplateNluSlotNode __SYSTEM_NLUDATA__ is None")
                    resolved = TemplateGetNode.get_default_value(
                        client_context)
                    return resolved
            else:
                if self._varType == 'name':
                    value = conversation.property(self._varName)
                elif self._varType == 'data':
                    value = conversation.data_property(self._varName)
                else:
                    value = conversation.current_question().property(
                        self._varName)
                if value is None:
                    YLogger.error(
                        self, "TemplateNluSlotNode %s is None" % self._varName)
                    resolved = TemplateGetNode.get_default_value(
                        client_context)
                    return resolved
        except Exception:
            YLogger.error(self,
                          "TemplateNluSlotNode failed to load NLU result")
            resolved = TemplateGetNode.get_default_value(client_context)
            return resolved

        slots = None
        try:
            json_dict = json.loads(value)
            if self._keys is not None:
                first = True
                for key in self._keys:
                    if first:
                        first = False
                        continue
                    json_dict = json_dict[key]
                    if key == self._keys[-1]:
                        break
            slots = json_dict["slots"]
        except Exception:
            YLogger.error(
                self, "TemplateNluSlotNode slots not found in target data")
            resolved = TemplateGetNode.get_default_value(client_context)
            return resolved

        slotsKeyName = "slot"

        slotKeys = [slot.get(slotsKeyName) for slot in slots]
        if itemName == "count":
            if slotName == "*":
                resolved = str(len(slotKeys))
            else:
                resolved = str(slotKeys.count(slotName))

            YLogger.debug(client_context, "nluslot [%s] resolved to [%s]",
                          itemName, resolved)
            return resolved

        index = None
        try:
            if slotName == "*":
                index = 0
                if slotIndex != 0:
                    index = slotIndex
            else:
                if slotIndex != 0:
                    slotCounter = 0
                    targetCounter = 0
                    for name in slotKeys:
                        if name == slotName:
                            if targetCounter == slotIndex:
                                index = slotCounter
                                break
                            targetCounter += 1
                        slotCounter += 1
                else:
                    index = slotKeys.index(slotName)
        except Exception:
            YLogger.debug(client_context, "nluslot non search keys:%s",
                          slotName)

        if index is not None:
            YLogger.debug(client_context, "nluintent index[%s]", index)
            try:
                if itemName in slots[index]:
                    resolved = str(slots[index].get(itemName))
            except Exception:
                YLogger.debug(client_context, "nluslot non search item:%s",
                              itemName)

        if resolved == '':
            YLogger.debug(client_context, "nluslot failed slot=[%s] item=[%s]",
                          slotName, itemName)
            resolved = TemplateGetNode.get_default_value(client_context)

        YLogger.debug(client_context, "nluslot [%s] resolved to [%s:%s]",
                      slotName, itemName, resolved)

        return resolved
コード例 #34
0
ファイル: json.py プロジェクト: tomiyama2392/cotoba-agent-oss
    def resolve_to_string(self, client_context):
        resolved = self.resolve_children(client_context)
        resolved = resolved.strip()
        conversation = client_context.bot.get_conversation(client_context)
        name = self._name.resolve(client_context)

        try:
            key = self._key.resolve(client_context)
            name = name + "." + key
        except Exception:
            pass

        try:
            self.function = self._function.resolve(client_context)
            if self.function not in ['len', 'delete', 'insert']:
                YLogger.debug(self, "JSON unknown function type [%s]",
                              self.function)
                return ''
        except Exception:
            self.function = 'None'
        try:
            self.index = self._index.resolve(client_context)
            try:
                int(self.index)
            except ValueError:
                YLogger.debug("JSON index not numeric [%s]", self.index)
        except Exception:
            self.index = ""
        try:
            self.item = self._item.resolve(client_context)
        except Exception:
            self.item = "value"

        if self.function == 'insert' and self.index == "":
            YLogger.debug(self, "JSON insert-function needs index parameter")
            return ''

        if self.function == 'delete':
            resolved = ''

        try:
            self.keys = name.split('.')
            if '' in self.keys:
                YLogger.debug(self, "JSON invalid key")
                if len(resolved) == 0 and self.function != 'delete':
                    return TemplateGetNode.get_default_value(client_context)
                else:
                    return ''

            if self._type == "var":
                if conversation.has_current_question():
                    value = conversation.current_question().property(
                        self.keys[0])
            elif self._type == "data":
                value = conversation.data_property(self.keys[0])
            elif self._type == "name":
                value = conversation.property(self.keys[0])
            else:
                YLogger.debug(self, "JSON invalid variables type")
                return ''
            json_dict = json.loads(value)
        except Exception:
            if len(resolved) == 0:
                json_dict = None
            else:
                json_dict = {}

        if len(resolved) > 0:
            resolved = self._json_set_elements(client_context, json_dict,
                                               resolved)
        else:
            if self.function == 'delete':
                resolved = self._json_delete_elements(client_context,
                                                      json_dict)
            else:
                resolved = self._json_get_elements(client_context, json_dict)

        return resolved
コード例 #35
0
ファイル: json.py プロジェクト: tomiyama2392/cotoba-agent-oss
    def _json_get_elements(self, client_context, json_dict):
        if self.index != "":
            try:
                indexNo = int(self.index)
            except Exception:
                resolved = TemplateGetNode.get_default_value(client_context)
                YLogger.debug(
                    client_context,
                    "Template-JSON failed to get (invalid index[%s])",
                    self.index)
                return resolved

        resolved = ''
        if json_dict is not None:
            try:
                first = True
                for key in self.keys:
                    if first:
                        first = False
                        continue
                    json_dict = json_dict[key]

                if type(json_dict) is dict or type(json_dict) is list:
                    dic_len = len(json_dict)
                    if self.function == 'len':
                        resolved = str(dic_len)
                    elif self.index != "":
                        if indexNo < 0:
                            indexNo += dic_len
                            if indexNo < 0:
                                indexNo = dic_len
                        if indexNo < dic_len:
                            if type(json_dict) is dict:
                                for loop, indexKey in enumerate(json_dict):
                                    if loop == indexNo:
                                        if self.item == 'key':
                                            resolved = indexKey
                                        else:
                                            resolved = json_dict[indexKey]
                                        break
                            else:
                                resolved = json_dict[indexNo]
                                if resolved is None:
                                    resolved = 'null'
                    else:
                        resolved = json_dict
                else:
                    if self.function == 'len':
                        resolved = "1"
                    else:
                        if self.index != "":
                            if indexNo == 0 or indexNo == -1:
                                resolved = json_dict
                            else:
                                resolved = ''
                        else:
                            if json_dict is None:
                                resolved = 'null'
                            else:
                                if type(json_dict) is str and len(
                                        json_dict) == 0:
                                    resolved = '""'
                                else:
                                    resolved = json_dict

                if type(resolved) is dict or type(resolved) is list:
                    resolved = json.dumps(resolved, ensure_ascii=False)
                elif type(resolved) is int or type(resolved) is float or type(
                        resolved) is complex:
                    resolved = str(resolved)
                elif type(resolved) is bool:
                    resolved = str(resolved).lower()
            except Exception as e:
                YLogger.exception(self, "JSON failed to load JSON", e)

        if resolved == '':
            YLogger.debug(client_context,
                          "TemplateJsonNode get failed %s index=[%s]",
                          self.keys, self.index)
            resolved = TemplateGetNode.get_default_value(client_context)

        YLogger.debug(client_context, "JSON get %s resolved to [%s]",
                      self.keys, resolved)
        return resolved
コード例 #36
0
 def test_default_value_default_get(self):
     self._client_context.bot.brain.configuration.defaults._default_get = "test456"
     self.assertEqual(
         "test456", TemplateGetNode.get_default_value(self._client_context))
コード例 #37
0
 def test_default_value_no_value(self):
     self._client_context.bot.brain.configuration.defaults._default_get = None
     self.assertEqual(
         "unknown", TemplateGetNode.get_default_value(self._client_context))
コード例 #38
0
ファイル: test_get.py プロジェクト: Freiza/program-y
 def __init__(self):
     TemplateGetNode.__init__(self)
コード例 #39
0
ファイル: properties.py プロジェクト: lilnana00/3ddd
    def execute(self, client_context, data):
        YLogger.debug(client_context, "Properties Admin - [%s]", data)

        properties = ""

        splits = data.split()
        command = splits[0]
        if command == 'GET':

            get_command = splits[1]
            if get_command == 'BOT':
                if len(splits) == 3:
                    var_name = splits[2]
                    properties = TemplateBotNode.get_bot_variable(
                        client_context, var_name)
                else:
                    return "Missing variable name for GET BOT"

            elif get_command == "USER":
                if len(splits) < 3:
                    return "Invalid syntax for GET USER, LOCAL or GLOBAL"

                var_type = splits[2].upper()
                if var_type not in ['LOCAL', 'GLOBAL']:
                    return "Invalid GET USER var type [%s]" % var_type

                if len(splits) < 4:
                    return "Missing variable name for GET USER"
                var_name = splits[3]

                if var_type == 'LOCAL':
                    properties = TemplateGetNode.get_property_value(
                        client_context, True, var_name)

                else:
                    properties = TemplateGetNode.get_property_value(
                        client_context, False, var_name)

            else:
                return "Unknown GET command [%s]" % get_command

        elif command == 'BOT':
            properties += "Properties:<br /><ul>"
            for pair in client_context.brain.properties.pairs:
                properties += "<li>%s = %s</li>" % (pair[0], pair[1])
            properties += "</ul>"
            properties += "<br />"

        elif command == "USER":
            if client_context.bot.has_conversation(client_context):
                conversation = client_context.bot.get_conversation(
                    client_context)

                properties += "Properties:<br /><ul>"
                for name, value in conversation.properties.items():
                    properties += "<li>%s = %s</li>" % (name, value)
                properties += "</ul>"
                properties += "<br />"

            else:
                properties += "No conversation currently available"

        else:
            return "Unknown properties command [%s]" % command

        return properties