def test_tag_and_namespace_from_text(self): tag, name = TextUtils.tag_and_namespace_from_text("") self.assertIsNotNone(tag) self.assertEqual("", tag) self.assertIsNone(name) tag, name = TextUtils.tag_and_namespace_from_text("text") self.assertIsNotNone(tag) self.assertEqual("text", tag) self.assertIsNone(name) tag, name = TextUtils.tag_and_namespace_from_text("{}") self.assertIsNotNone(tag) self.assertEqual("{}", tag) self.assertIsNone(name) tag, name = TextUtils.tag_and_namespace_from_text("{http://alicebot.org/2001/AIML}") self.assertIsNotNone(tag) self.assertEqual("{http://alicebot.org/2001/AIML}", tag) self.assertIsNone(name) tag, name = TextUtils.tag_and_namespace_from_text("{http://alicebot.org/2001/AIML}aiml") self.assertIsNotNone(tag) self.assertEqual("aiml", tag) self.assertIsNotNone(name) self.assertEqual("{http://alicebot.org/2001/AIML}", name)
def parse_topic(self, topic_element, namespace): if 'name' in topic_element.attrib: name = topic_element.attrib['name'] if name is None or not name: raise ParserException("Topic name empty or null", xml_element=topic_element) xml = "<topic>%s</topic>" % name YLogger.info(self, "Topic attrib converted to %s", xml) topic_pattern = ET.fromstring(xml) else: raise ParserException("Missing name attribute for topic", xml_element=topic_element) category_found = False num_category = 0 for child in topic_element: tag_name, _ = TextUtils.tag_and_namespace_from_text(child.tag) if tag_name == 'category': self.parse_category(child, namespace, topic_pattern) category_found = True num_category += 1 else: raise ParserException("Unknown child node of topic, %s" % child.tag, xml_element=topic_element) if category_found is False: raise ParserException("No categories in topic", xml_element=topic_element) return num_category
def test_tag_and_namespace_from_text(self): tag, name = TextUtils.tag_and_namespace_from_text("") self.assertIsNotNone(tag) self.assertEquals("", tag) self.assertIsNone(name) tag, name = TextUtils.tag_and_namespace_from_text("text") self.assertIsNotNone(tag) self.assertEquals("text", tag) self.assertIsNone(name) tag, name = TextUtils.tag_and_namespace_from_text("{http://alicebot.org/2001/AIML}aiml ") self.assertIsNotNone(tag) self.assertEquals("aiml", tag) self.assertIsNotNone(name) self.assertEquals("{http://alicebot.org/2001/AIML}", name)
def check_aiml_tag(aiml, filename=None): # Null check just to be sure if aiml is None: raise ParserException("Null root tag", filename=filename) tag_name, namespace = TextUtils.tag_and_namespace_from_text(aiml.tag) # Then if check is just <aiml>, thats OK if tag_name != 'aiml': raise ParserException("Root tag is not <aiml>", filename=filename) return tag_name, namespace
def parse_aiml(self, aiml_xml, namespace, filename=None, userid="*"): del namespace self.parse_version(aiml_xml) categories_found = False num_category = 0 for expression in aiml_xml: tag_name, namespace = TextUtils.tag_and_namespace_from_text( expression.tag) if tag_name == 'topic': try: num_topic_categories = self.parse_topic( expression, namespace) num_category += num_topic_categories categories_found = True except DuplicateGrammarException as dupe_excep: self.handle_aiml_duplicate(dupe_excep, filename, expression) except ParserException as parser_excep: self.handle_aiml_error(parser_excep, filename, expression) elif tag_name == 'category': try: self.parse_category(expression, namespace, userid=userid) categories_found = True num_category += 1 except DuplicateGrammarException as dupe_excep: self.handle_aiml_duplicate(dupe_excep, filename, expression) except ParserException as parser_excep: self.handle_aiml_error(parser_excep, filename, expression) else: raise ParserException("Unknown top level tag, %s" % expression.tag, xml_element=expression) if categories_found is False: if filename is not None: YLogger.warning(self, "no categories in aiml file") else: YLogger.warning(self, "no categories in aiml file [%s]" % filename) return num_category