def __init__(self, section_name="bot"): self._brain_configs = [] self._brain_configs.append(BrainConfiguration("brain")) self._brain_selector = None self._bot_root = BotConfiguration.DEFAULT_ROOT self._default_response = BotConfiguration.DEFAULT_RESPONSE self._default_response_srai = BotConfiguration.DEFAULT_RESPONSE_SRAI self._exit_response = BotConfiguration.DEFAULT_EXIT_RESPONSE self._exit_response_srai = BotConfiguration.DEFAULT_EXIT_RESPONSE_SRAI self._initial_question = BotConfiguration.DEFAULT_INITIAL_QUESTION self._initial_question_srai = BotConfiguration.DEFAULT_INITIAL_QUESTION_SRAI self._empty_string = BotConfiguration.DEFAULT_EMPTY_STRING self._override_properties = BotConfiguration.DEFAULT_OVERRIDE_PREDICATES self._max_question_recursion = BotConfiguration.DEFAULT_MAX_QUESTION_RECURSION self._max_question_timeout = BotConfiguration.DEFAULT_MAX_QUESTION_TIMEOUT self._max_search_depth = BotConfiguration.DEFAULT_MAX_SEARCH_DEPTH self._max_search_timeout = BotConfiguration.DEFAULT_MAX_SEARCH_TIMEOUT self._tab_parse_output = BotConfiguration.DEFAULT_TAB_PARSE_OUTPUT self._spelling = BotSpellingConfiguration() self._from_translator = BotTranslatorConfiguration( name="from_translator") self._to_translator = BotTranslatorConfiguration(name="to_translator") self._sentiment = BotSentimentAnalyserConfiguration() self._conversations = BotConversationsConfiguration() self._splitter = BotSentenceSplitterConfiguration() self._joiner = BotSentenceJoinerConfiguration() BaseContainerConfigurationData.__init__(self, section_name)
def test_with_data(self): yaml = YamlConfigurationFile() self.assertIsNotNone(yaml) yaml.load_from_text( """ bot: conversations: max_histories: 666 initial_topic: topic1 restore_last_topic: true type: file config_name: file_storage file_storage: dir: $BOT_ROOT/conversations """, ConsoleConfiguration(), ".") bot_config = yaml.get_section("bot") convo_config = BotConversationsConfiguration() convo_config.load_config_section(yaml, bot_config, ".") self.assertEquals(convo_config.section_name, "conversations") self.assertEquals(666, convo_config.max_histories) self.assertEquals("topic1", convo_config.initial_topic) self.assertTrue(convo_config.restore_last_topic) self.assertEquals(convo_config.type, "file") self.assertIsNotNone(convo_config.storage)
def test_with_data(self): yaml = YamlConfigurationFile() self.assertIsNotNone(yaml) yaml.load_from_text(""" bot: conversations: max_histories: 666 initial_topic: topic1 restore_last_topic: true type: file config_name: file_storage file_storage: dir: $BOT_ROOT/conversations """, ConsoleConfiguration(), ".") bot_config = yaml.get_section("bot") convo_config = BotConversationsConfiguration() convo_config.load_config_section(yaml, bot_config, ".") self.assertEquals(convo_config.section_name, "conversations") self.assertEquals(666, convo_config.max_histories) self.assertEquals("topic1", convo_config.initial_topic) self.assertTrue(convo_config.restore_last_topic) self.assertEquals(convo_config.type, "file") self.assertIsNotNone(convo_config.storage)
def test_conversation_operations_multi_client_no_storage(self): config = BotConversationsConfiguration() config._multi_client = True mgr = ConversationManager(config) convo_dir = self.get_temp_dir() + os.sep + "storage" + os.sep + "conversations" if os.path.exists(convo_dir): shutil.rmtree(convo_dir) client = TestClient() #client.add_conversation_store(convo_dir) mgr.initialise(client.storage_factory) client_context = client.create_client_context("user1") conversation = mgr.get_conversation(client_context) question1 = Question.create_from_text(client_context, "Hello There") question1.sentence(0).response = "Hi" conversation.record_dialog(question1) mgr.save_conversation(client_context) question2 = Question.create_from_text(client_context, "Hello There Again") question2.sentence(0).response = "Hi Again" conversation.record_dialog(question2) mgr.save_conversation(client_context) question3 = Question.create_from_text(client_context, "Hello There Again Again") question3.sentence(0).response = "Hi Again Again" conversation.record_dialog(question3) mgr.save_conversation(client_context) conversation2 = mgr.get_conversation(client_context) self.assertIsNotNone(conversation2) self.assertEqual(len(mgr.conversations), 1) mgr.empty() self.assertEqual(len(mgr.conversations), 0) conversation = mgr.get_conversation(client_context) self.assertEqual(len(mgr.conversations), 1) if os.path.exists(convo_dir): shutil.rmtree(convo_dir) self.assertIsNotNone(conversation) self.assertEqual(len(conversation.questions), 0)
def to_yaml(self, data, defaults=True): data['bot_root'] = self.bot_root data['default_response'] = self.default_response data['default_response_srai'] = self.default_response_srai data['exit_response'] = self.exit_response data['exit_response_srai'] = self.exit_response_srai data['initial_question'] = self.initial_question data['initial_question_srai'] = self.initial_question_srai data['empty_string'] = self.empty_string data['override_properties'] = self.override_properties data['max_question_recursion'] = self.max_question_recursion data['max_question_timeout'] = self.max_question_timeout data['max_search_depth'] = self.max_search_depth data['max_search_timeout'] = self.max_search_timeout data['tab_parse_output'] = self.tab_parse_output self.config_to_yaml(data, BotSpellingConfiguration(), defaults) self.config_to_yaml(data, BotConversationsConfiguration(), defaults) self.config_to_yaml(data, BotSentenceSplitterConfiguration(), defaults) self.config_to_yaml(data, BotSentenceJoinerConfiguration(), defaults) self.config_to_yaml(data, BotTranslatorConfiguration(name="from_translator"), defaults) self.config_to_yaml(data, BotTranslatorConfiguration(name="to_translator"), defaults) self.config_to_yaml(data, BotSentimentAnalyserConfiguration(), defaults)
def test_conversation_operations_no_conversation(self): config = BotConversationsConfiguration() mgr = ConversationManager(config) convo_dir = self.get_temp_dir() + os.sep + "storage" + os.sep + "conversations" if os.path.exists(convo_dir): shutil.rmtree(convo_dir) client = TestClient() client.add_conversation_store(convo_dir) mgr.initialise(client.storage_factory) client_context = client.create_client_context("user1") conversation = mgr.get_conversation(client_context) question1 = Question.create_from_text(client_context, "Hello There") question1.sentence(0).response = "Hi" conversation.record_dialog(question1) del mgr._conversations[client_context.userid] mgr.save_conversation(client_context)
def test_remove_conversation_invalid_userid(self): config = BotConversationsConfiguration() mgr = ConversationManager(config) if os.path.exists("./storage/conversations"): shutil.rmtree("./storage/conversations") client = TestClient() client.add_conversation_store("./storage/conversations") mgr.initialise(client.storage_factory) client_context = client.create_client_context("user1") self.assertEqual(len(mgr.conversations), 0) conversation = mgr.get_conversation(client_context) question1 = Question.create_from_text(client_context, "Hello There") question1.sentence(0).response = "Hi" conversation.record_dialog(question1) mgr.save_conversation(client_context) self.assertTrue( os.path.exists("./storage/conversations/testclient_user1.conv")) client_context._userid = "user2" mgr.remove_conversation(client_context) self.assertTrue( os.path.exists("./storage/conversations/testclient_user1.conv")) self.assertFalse( os.path.exists("./storage/conversations/testclient_user2.conv")) if os.path.exists("./storage/conversations"): shutil.rmtree("./storage/conversations")
def test_init(self): config = BotConversationsConfiguration() mgr = ConversationManager(config) self.assertEqual(mgr.configuration, config) self.assertIsNone(mgr.storage) self.assertEqual(mgr.conversations, {})
def test_get_conversation_multi_client(self): config = BotConversationsConfiguration() mgr = ConversationManager(config) if os.path.exists("./storage/conversations"): shutil.rmtree("./storage/conversations") client = TestClient() client.add_conversation_store("./storage/conversations") mgr.initialise(client.storage_factory) mgr.configuration._multi_client = True client_context = client.create_client_context("user1") conversation = mgr.get_conversation(client_context) question1 = Question.create_from_text(client_context, "Hello There") question1.sentence(0).response = "Hi" conversation.record_dialog(question1) mgr.save_conversation(client_context) conversation = mgr.get_conversation(client_context) self.assertEqual(len(mgr.conversations), 1) if os.path.exists("./storage/conversations"): shutil.rmtree("./storage/conversations")
def test_without_data(self): yaml = YamlConfigurationFile() self.assertIsNotNone(yaml) yaml.load_from_text(""" bot: """, ConsoleConfiguration(), ".") bot_config = yaml.get_section("bot") convo_config = BotConversationsConfiguration() convo_config.load_config_section(yaml, bot_config, ".") self.assertEqual(convo_config.section_name, "conversations") self.assertEqual(100, convo_config.max_histories) self.assertEqual("*", convo_config.initial_topic) self.assertFalse(convo_config.restore_last_topic) self.assertFalse(convo_config.multi_client)
def test_initialise(self): config = BotConversationsConfiguration() mgr = ConversationManager(config) client = TestClient() client.add_conversation_store("./storage/conversations") mgr.initialise(client.storage_factory) self.assertIsNotNone(mgr.storage)
def test_without_data(self): yaml = YamlConfigurationFile() self.assertIsNotNone(yaml) yaml.load_from_text(""" bot: """, ConsoleConfiguration(), ".") bot_config = yaml.get_section("bot") convo_config = BotConversationsConfiguration() convo_config.load_config_section(yaml, bot_config, ".") self.assertEquals(convo_config.section_name, "conversations") self.assertEquals(100, convo_config.max_histories) self.assertEquals("*", convo_config.initial_topic) self.assertFalse(convo_config.restore_last_topic) self.assertIsNone(convo_config.type) self.assertIsNone(convo_config.storage)
def test_with_data(self): yaml = YamlConfigurationFile() self.assertIsNotNone(yaml) yaml.load_from_text(""" bot: conversations: max_histories: 666 initial_topic: topic1 restore_last_topic: true multi_client: true """, ConsoleConfiguration(), ".") bot_config = yaml.get_section("bot") convo_config = BotConversationsConfiguration() convo_config.load_config_section(yaml, bot_config, ".") license_keys = LicenseKeys() convo_config.check_for_license_keys(license_keys) self.assertEqual(convo_config.section_name, "conversations") self.assertEqual(666, convo_config.max_histories) self.assertEqual("topic1", convo_config.initial_topic) self.assertTrue(convo_config.restore_last_topic) self.assertTrue(convo_config.multi_client)
def test_conversation_operations(self): config = BotConversationsConfiguration() mgr = ConversationManager(config) if os.path.exists("./storage/conversations"): shutil.rmtree("./storage/conversations") client = TestClient() client.add_conversation_store("./storage/conversations") mgr.initialise(client.storage_factory) client_context = client.create_client_context("user1") conversation = mgr.get_conversation(client_context) question1 = Question.create_from_text(client_context, "Hello There") question1.sentence(0).response = "Hi" conversation.record_dialog(question1) mgr.save_conversation(client_context) question2 = Question.create_from_text(client_context, "Hello There Again") question2.sentence(0).response = "Hi Again" conversation.record_dialog(question2) mgr.save_conversation(client_context) question3 = Question.create_from_text(client_context, "Hello There Again Again") question3.sentence(0).response = "Hi Again Again" conversation.record_dialog(question3) mgr.save_conversation(client_context) self.assertTrue( os.path.exists("./storage/conversations/testclient_user1.conv")) self.assertEqual(len(mgr.conversations), 1) mgr.empty() self.assertEqual(len(mgr.conversations), 0) conversation = mgr.get_conversation(client_context) self.assertEqual(len(mgr.conversations), 1) self.assertIsNotNone(conversation) self.assertEqual(len(conversation.questions), 3) if os.path.exists("./storage/conversations"): shutil.rmtree("./storage/conversations")
def to_yaml(self, data, defaults=True): data['bot_root'] = self.bot_root data['default_response'] = self.default_response data['default_response_srai'] = self.default_response_srai data['exit_response'] = self.exit_response data['exit_response_srai'] = self.exit_response_srai data['initial_question'] = self.initial_question data['initial_question_srai'] = self.initial_question_srai data['empty_string'] = self.empty_string data['override_properties'] = self.override_properties data['max_question_recursion'] = self.max_question_recursion data['max_question_timeout'] = self.max_question_timeout data['max_search_depth'] = self.max_search_depth data['max_search_timeout'] = self.max_search_timeout data['tab_parse_output'] = self.tab_parse_output self.config_to_yaml(data, BotSpellingConfiguration(), defaults) self.config_to_yaml(data, BotConversationsConfiguration(), defaults)
def test_save_conversation_no_userid_data(self): config = BotConversationsConfiguration() mgr = ConversationManager(config) if os.path.exists("./storage/conversations"): shutil.rmtree("./storage/conversations") client = TestClient() client.add_conversation_store("./storage/conversations") mgr.initialise(client.storage_factory) client_context = client.create_client_context("user1") mgr.get_conversation(client_context) self.assertEqual(len(mgr.conversations), 1) mgr.save_conversation(client_context) self.assertFalse( os.path.exists("./storage/conversations/testclient_user1.conv"))
def __init__(self, section_name="bot"): self._brain_configs = [] self._brain_configs.append(BrainConfiguration("brain")) self._brain_selector = None self._bot_root = BotConfiguration.DEFAULT_ROOT self._default_response = BotConfiguration.DEFAULT_RESPONSE self._default_response_srai = BotConfiguration.DEFAULT_RESPONSE_SRAI self._exit_response = BotConfiguration.DEFAULT_EXIT_RESPONSE self._exit_response_srai = BotConfiguration.DEFAULT_EXIT_RESPONSE_SRAI self._initial_question = BotConfiguration.DEFAULT_INITIAL_QUESTION self._initial_question_srai = BotConfiguration.DEFAULT_INITIAL_QUESTION_SRAI self._empty_string = BotConfiguration.DEFAULT_EMPTY_STRING self._override_properties = BotConfiguration.DEFAULT_OVERRIDE_PREDICATES self._max_question_recursion = BotConfiguration.DEFAULT_MAX_QUESTION_RECURSION self._max_question_timeout = BotConfiguration.DEFAULT_MAX_QUESTION_TIMEOUT self._max_search_depth = BotConfiguration.DEFAULT_MAX_SEARCH_DEPTH self._max_search_timeout = BotConfiguration.DEFAULT_MAX_SEARCH_TIMEOUT self._tab_parse_output = BotConfiguration.DEFAULT_TAB_PARSE_OUTPUT self._spelling = BotSpellingConfiguration() self._conversations = BotConversationsConfiguration() BaseContainerConfigurationData.__init__(self, section_name)
def test_defaults(self): convo_config = BotConversationsConfiguration() data = {} convo_config.to_yaml(data, True) BotConversationsConfigurationTests.assert_defaults(self, data)
class BotConfiguration(BaseContainerConfigurationData): DEFAULT_ROOT = "." DEFAULT_RESPONSE = "" DEFAULT_RESPONSE_SRAI = "" DEFAULT_EMPTY_STRING = "" DEFAULT_EXIT_RESPONSE = "Bye!" DEFAULT_EXIT_RESPONSE_SRAI = "" DEFAULT_INITIAL_QUESTION = "Hello" DEFAULT_INITIAL_QUESTION_SRAI = "" DEFAULT_OVERRIDE_PREDICATES = True DEFAULT_MAX_QUESTION_RECURSION = 100 DEFAULT_MAX_QUESTION_TIMEOUT = -1 DEFAULT_MAX_SEARCH_DEPTH = 100 DEFAULT_MAX_SEARCH_TIMEOUT = -1 DEFAULT_TAB_PARSE_OUTPUT = True def __init__(self, section_name="bot"): self._brain_configs = [] self._brain_configs.append(BrainConfiguration("brain")) self._brain_selector = None self._bot_root = BotConfiguration.DEFAULT_ROOT self._default_response = BotConfiguration.DEFAULT_RESPONSE self._default_response_srai = BotConfiguration.DEFAULT_RESPONSE_SRAI self._exit_response = BotConfiguration.DEFAULT_EXIT_RESPONSE self._exit_response_srai = BotConfiguration.DEFAULT_EXIT_RESPONSE_SRAI self._initial_question = BotConfiguration.DEFAULT_INITIAL_QUESTION self._initial_question_srai = BotConfiguration.DEFAULT_INITIAL_QUESTION_SRAI self._empty_string = BotConfiguration.DEFAULT_EMPTY_STRING self._override_properties = BotConfiguration.DEFAULT_OVERRIDE_PREDICATES self._max_question_recursion = BotConfiguration.DEFAULT_MAX_QUESTION_RECURSION self._max_question_timeout = BotConfiguration.DEFAULT_MAX_QUESTION_TIMEOUT self._max_search_depth = BotConfiguration.DEFAULT_MAX_SEARCH_DEPTH self._max_search_timeout = BotConfiguration.DEFAULT_MAX_SEARCH_TIMEOUT self._tab_parse_output = BotConfiguration.DEFAULT_TAB_PARSE_OUTPUT self._spelling = BotSpellingConfiguration() self._conversations = BotConversationsConfiguration() BaseContainerConfigurationData.__init__(self, section_name) def load_configuration(self, configuration_file, bot_root): bot = configuration_file.get_section(self.section_name) if bot is not None: self._default_response = configuration_file.get_option(bot, "default_response", BotConfiguration.DEFAULT_RESPONSE) self._default_response_srai = configuration_file.get_option(bot, "default_response_srai", BotConfiguration.DEFAULT_RESPONSE_SRAI) self._empty_string = configuration_file.get_option(bot, "empty_string", BotConfiguration.DEFAULT_EMPTY_STRING) self._exit_response = configuration_file.get_option(bot, "exit_response", BotConfiguration.DEFAULT_EXIT_RESPONSE) self._exit_response_srai = configuration_file.get_option(bot, "exit_response_srai", BotConfiguration.DEFAULT_EXIT_RESPONSE_SRAI) self._initial_question = configuration_file.get_option(bot, "initial_question", BotConfiguration.DEFAULT_INITIAL_QUESTION) self._initial_question_srai = configuration_file.get_option(bot, "initial_question_srai", BotConfiguration.DEFAULT_INITIAL_QUESTION_SRAI) self._override_properties = configuration_file.get_option(bot, "override_properties", BotConfiguration.DEFAULT_OVERRIDE_PREDICATES) self._max_question_recursion = configuration_file.get_int_option(bot, "max_question_recursion", BotConfiguration.DEFAULT_MAX_QUESTION_RECURSION) self._max_question_timeout = configuration_file.get_int_option(bot, "max_question_timeout", BotConfiguration.DEFAULT_MAX_QUESTION_TIMEOUT) self._max_search_depth = configuration_file.get_int_option(bot, "max_search_depth", BotConfiguration.DEFAULT_MAX_SEARCH_DEPTH) self._max_search_timeout = configuration_file.get_int_option(bot, "max_search_timeout", BotConfiguration.DEFAULT_MAX_SEARCH_TIMEOUT) self._tab_parse_output = configuration_file.get_bool_option(bot, "tab_parse_output", BotConfiguration.DEFAULT_TAB_PARSE_OUTPUT) self._spelling.load_config_section(configuration_file, bot, bot_root) self._conversations.load_config_section(configuration_file, bot, bot_root) else: YLogger.warning(self, "Config section [%s] missing, using default values", self.section_name) self.load_configurations(configuration_file, bot, bot_root) def load_configurations(self, configuration_file, bot, bot_root): if bot is not None: brain_names = configuration_file.get_multi_option(bot, "brain", missing_value="brain") first = True for name in brain_names: if first is True: config = self._brain_configs[0] first = False else: config = BrainConfiguration(name) self._brain_configs.append(config) config.load_configuration(configuration_file, bot_root) self._brain_selector = configuration_file.get_option(bot, "brain_selector") else: YLogger.warning(self, "No brain name defined for bot [%s], defaulting to 'brain'.", self.section_name) brain_name = "brain" self._brain_configs[0]._section_name = brain_name self._brain_configs[0].load_configuration(configuration_file, bot_root) @property def configurations(self): return self._brain_configs @property def brain_selector(self): return self._brain_selector @property def bot_root(self): return self._bot_root @property def default_response(self): return self._default_response @default_response.setter def default_response(self, text): self._default_response = text @property def default_response_srai(self): return self._default_response_srai @default_response_srai.setter def default_response_srai(self, text): self._default_response_srai = text @property def empty_string(self): return self._empty_string @empty_string.setter def empty_string(self, text): self._empty_string = text @property def exit_response(self): return self._exit_response @exit_response.setter def exit_response(self, text): self._exit_response = text @property def exit_response_srai(self): return self._exit_response_srai @exit_response_srai.setter def exit_response_srai(self, text): self._exit_response_srai = text @property def initial_question(self): return self._initial_question @initial_question.setter def initial_question(self, text): self._initial_question = text @property def initial_question_srai(self): return self._initial_question_srai @initial_question_srai.setter def initial_question_srai(self, text): self._initial_question_srai = text @property def override_properties(self): return self._override_properties @override_properties.setter def override_properties(self, override): self._override_properties = override @property def max_question_recursion(self): return self._max_question_recursion @property def max_question_timeout(self): return self._max_question_timeout @property def max_search_depth(self): return self._max_search_depth @property def max_search_timeout(self): return self._max_search_timeout @property def tab_parse_output(self): return self._tab_parse_output @property def spelling(self): return self._spelling @property def conversations(self): return self._conversations def to_yaml(self, data, defaults=True): data['bot_root'] = self.bot_root data['default_response'] = self.default_response data['default_response_srai'] = self.default_response_srai data['exit_response'] = self.exit_response data['exit_response_srai'] = self.exit_response_srai data['initial_question'] = self.initial_question data['initial_question_srai'] = self.initial_question_srai data['empty_string'] = self.empty_string data['override_properties'] = self.override_properties data['max_question_recursion'] = self.max_question_recursion data['max_question_timeout'] = self.max_question_timeout data['max_search_depth'] = self.max_search_depth data['max_search_timeout'] = self.max_search_timeout data['tab_parse_output'] = self.tab_parse_output self.config_to_yaml(data, BotSpellingConfiguration(), defaults) self.config_to_yaml(data, BotConversationsConfiguration(), defaults)
def test_initialise_storage_engine_failed(self): config = BotConversationsConfiguration() mgr = ConversationManager(config) mgr.initialise(MockStorageFactory()) self.assertIsNone(mgr.storage)
class BotConfiguration(BaseContainerConfigurationData): DEFAULT_ROOT = "." DEFAULT_RESPONSE = "" DEFAULT_RESPONSE_SRAI = "" DEFAULT_EMPTY_STRING = "" DEFAULT_EXIT_RESPONSE = "Bye!" DEFAULT_EXIT_RESPONSE_SRAI = "" DEFAULT_INITIAL_QUESTION = "Hello" DEFAULT_INITIAL_QUESTION_SRAI = "" DEFAULT_OVERRIDE_PREDICATES = True DEFAULT_MAX_QUESTION_RECURSION = 100 DEFAULT_MAX_QUESTION_TIMEOUT = -1 DEFAULT_MAX_SEARCH_DEPTH = 100 DEFAULT_MAX_SEARCH_TIMEOUT = -1 DEFAULT_TAB_PARSE_OUTPUT = True def __init__(self, section_name="bot"): self._brain_configs = [] self._brain_configs.append(BrainConfiguration("brain")) self._bot_root = BotConfiguration.DEFAULT_ROOT self._default_response = BotConfiguration.DEFAULT_RESPONSE self._default_response_srai = BotConfiguration.DEFAULT_RESPONSE_SRAI self._exit_response = BotConfiguration.DEFAULT_EXIT_RESPONSE self._exit_response_srai = BotConfiguration.DEFAULT_EXIT_RESPONSE_SRAI self._initial_question = BotConfiguration.DEFAULT_INITIAL_QUESTION self._initial_question_srai = BotConfiguration.DEFAULT_INITIAL_QUESTION_SRAI self._empty_string = BotConfiguration.DEFAULT_EMPTY_STRING self._override_properties = BotConfiguration.DEFAULT_OVERRIDE_PREDICATES self._max_question_recursion = BotConfiguration.DEFAULT_MAX_QUESTION_RECURSION self._max_question_timeout = BotConfiguration.DEFAULT_MAX_QUESTION_TIMEOUT self._max_search_depth = BotConfiguration.DEFAULT_MAX_SEARCH_DEPTH self._max_search_timeout = BotConfiguration.DEFAULT_MAX_SEARCH_TIMEOUT self._tab_parse_output = BotConfiguration.DEFAULT_TAB_PARSE_OUTPUT self._spelling = BotSpellingConfiguration() self._conversations = BotConversationsConfiguration() BaseContainerConfigurationData.__init__(self, section_name) def load_configuration(self, configuration_file, bot_root): bot = configuration_file.get_section(self.section_name) if bot is not None: self._default_response = configuration_file.get_option(bot, "default_response", BotConfiguration.DEFAULT_RESPONSE) self._default_response_srai = configuration_file.get_option(bot, "default_response_srai", BotConfiguration.DEFAULT_RESPONSE_SRAI) self._empty_string = configuration_file.get_option(bot, "empty_string", BotConfiguration.DEFAULT_EMPTY_STRING) self._exit_response = configuration_file.get_option(bot, "exit_response", BotConfiguration.DEFAULT_EXIT_RESPONSE) self._exit_response_srai = configuration_file.get_option(bot, "exit_response_srai", BotConfiguration.DEFAULT_EXIT_RESPONSE_SRAI) self._initial_question = configuration_file.get_option(bot, "initial_question", BotConfiguration.DEFAULT_INITIAL_QUESTION) self._initial_question_srai = configuration_file.get_option(bot, "initial_question_srai", BotConfiguration.DEFAULT_INITIAL_QUESTION_SRAI) self._override_properties = configuration_file.get_option(bot, "override_properties", BotConfiguration.DEFAULT_OVERRIDE_PREDICATES) self._max_question_recursion = configuration_file.get_int_option(bot, "max_question_recursion", BotConfiguration.DEFAULT_MAX_QUESTION_RECURSION) self._max_question_timeout = configuration_file.get_int_option(bot, "max_question_timeout", BotConfiguration.DEFAULT_MAX_QUESTION_TIMEOUT) self._max_search_depth = configuration_file.get_int_option(bot, "max_search_depth", BotConfiguration.DEFAULT_MAX_SEARCH_DEPTH) self._max_search_timeout = configuration_file.get_int_option(bot, "max_search_timeout", BotConfiguration.DEFAULT_MAX_SEARCH_TIMEOUT) self._tab_parse_output = configuration_file.get_bool_option(bot, "tab_parse_output", BotConfiguration.DEFAULT_TAB_PARSE_OUTPUT) self._spelling.load_config_section(configuration_file, bot, bot_root) self._conversations.load_config_section(configuration_file, bot, bot_root) else: YLogger.warning(self, "Config section [%s] missing, using default values", self.section_name) self.load_configurations(configuration_file, bot, bot_root) def load_configurations(self, configuration_file, bot, bot_root): if bot is not None: brain_names = configuration_file.get_multi_option(bot, "brain", missing_value="brain") first = True for name in brain_names: if first is True: config = self._brain_configs[0] first = False else: config = BrainConfiguration(name) self._brain_configs.append(config) config.load_configuration(configuration_file, bot_root) else: YLogger.warning(self, "No brain name defined for bot [%s], defaulting to 'brain'.", self.section_name) brain_name = "brain" self._brain_configs[0]._section_name = brain_name self._brain_configs[0].load_configuration(configuration_file, bot_root) @property def configurations(self): return self._brain_configs @property def bot_root(self): return self._bot_root @property def default_response(self): return self._default_response @default_response.setter def default_response(self, text): self._default_response = text @property def default_response_srai(self): return self._default_response_srai @default_response_srai.setter def default_response_srai(self, text): self._default_response_srai = text @property def empty_string(self): return self._empty_string @empty_string.setter def empty_string(self, text): self._empty_string = text @property def exit_response(self): return self._exit_response @exit_response.setter def exit_response(self, text): self._exit_response = text @property def exit_response_srai(self): return self._exit_response_srai @exit_response_srai.setter def exit_response_srai(self, text): self._exit_response_srai = text @property def initial_question(self): return self._initial_question @initial_question.setter def initial_question(self, text): self._initial_question = text @property def initial_question_srai(self): return self._initial_question_srai @initial_question_srai.setter def initial_question_srai(self, text): self._initial_question_srai = text @property def override_properties(self): return self._override_properties @override_properties.setter def override_properties(self, override): self._override_properties = override @property def max_question_recursion(self): return self._max_question_recursion @property def max_question_timeout(self): return self._max_question_timeout @property def max_search_depth(self): return self._max_search_depth @property def max_search_timeout(self): return self._max_search_timeout @property def tab_parse_output(self): return self._tab_parse_output @property def spelling(self): return self._spelling @property def conversations(self): return self._conversations
class BotConfiguration(BaseContainerConfigurationData): DEFAULT_ROOT = "." DEFAULT_RESPONSE = "" DEFAULT_RESPONSE_SRAI = "" DEFAULT_EMPTY_STRING = "" DEFAULT_EXIT_RESPONSE = "Bye!" DEFAULT_EXIT_RESPONSE_SRAI = "" DEFAULT_INITIAL_QUESTION = "Hello" DEFAULT_INITIAL_QUESTION_SRAI = "" DEFAULT_OVERRIDE_PREDICATES = True DEFAULT_MAX_QUESTION_RECURSION = 100 DEFAULT_MAX_QUESTION_TIMEOUT = -1 DEFAULT_MAX_SEARCH_DEPTH = 100 DEFAULT_MAX_SEARCH_TIMEOUT = -1 DEFAULT_TAB_PARSE_OUTPUT = True def __init__(self, section_name="bot"): self._brain_configs = [] self._brain_configs.append(BrainConfiguration("brain")) self._brain_selector = None self._bot_root = BotConfiguration.DEFAULT_ROOT self._default_response = BotConfiguration.DEFAULT_RESPONSE self._default_response_srai = BotConfiguration.DEFAULT_RESPONSE_SRAI self._exit_response = BotConfiguration.DEFAULT_EXIT_RESPONSE self._exit_response_srai = BotConfiguration.DEFAULT_EXIT_RESPONSE_SRAI self._initial_question = BotConfiguration.DEFAULT_INITIAL_QUESTION self._initial_question_srai = BotConfiguration.DEFAULT_INITIAL_QUESTION_SRAI self._empty_string = BotConfiguration.DEFAULT_EMPTY_STRING self._override_properties = BotConfiguration.DEFAULT_OVERRIDE_PREDICATES self._max_question_recursion = BotConfiguration.DEFAULT_MAX_QUESTION_RECURSION self._max_question_timeout = BotConfiguration.DEFAULT_MAX_QUESTION_TIMEOUT self._max_search_depth = BotConfiguration.DEFAULT_MAX_SEARCH_DEPTH self._max_search_timeout = BotConfiguration.DEFAULT_MAX_SEARCH_TIMEOUT self._tab_parse_output = BotConfiguration.DEFAULT_TAB_PARSE_OUTPUT self._spelling = BotSpellingConfiguration() self._from_translator = BotTranslatorConfiguration( name="from_translator") self._to_translator = BotTranslatorConfiguration(name="to_translator") self._sentiment = BotSentimentAnalyserConfiguration() self._conversations = BotConversationsConfiguration() self._splitter = BotSentenceSplitterConfiguration() self._joiner = BotSentenceJoinerConfiguration() BaseContainerConfigurationData.__init__(self, section_name) def check_for_license_keys(self, license_keys): BaseContainerConfigurationData.check_for_license_keys( self, license_keys) def load_configuration(self, configuration_file, bot_root, subs: Substitutions = None): bot = configuration_file.get_section(self.section_name) if bot is not None: self._default_response = configuration_file.get_option( bot, "default_response", BotConfiguration.DEFAULT_RESPONSE, subs=subs) self._default_response_srai = configuration_file.get_option( bot, "default_response_srai", BotConfiguration.DEFAULT_RESPONSE_SRAI, subs=subs) self._empty_string = configuration_file.get_option( bot, "empty_string", BotConfiguration.DEFAULT_EMPTY_STRING, subs=subs) self._exit_response = configuration_file.get_option( bot, "exit_response", BotConfiguration.DEFAULT_EXIT_RESPONSE, subs=subs) self._exit_response_srai = configuration_file.get_option( bot, "exit_response_srai", BotConfiguration.DEFAULT_EXIT_RESPONSE_SRAI, subs=subs) self._initial_question = configuration_file.get_option( bot, "initial_question", BotConfiguration.DEFAULT_INITIAL_QUESTION, subs=subs) self._initial_question_srai = configuration_file.get_option( bot, "initial_question_srai", BotConfiguration.DEFAULT_INITIAL_QUESTION_SRAI, subs=subs) self._override_properties = configuration_file.get_option( bot, "override_properties", BotConfiguration.DEFAULT_OVERRIDE_PREDICATES, subs=subs) self._max_question_recursion = configuration_file.get_int_option( bot, "max_question_recursion", BotConfiguration.DEFAULT_MAX_QUESTION_RECURSION, subs=subs) self._max_question_timeout = configuration_file.get_int_option( bot, "max_question_timeout", BotConfiguration.DEFAULT_MAX_QUESTION_TIMEOUT, subs=subs) self._max_search_depth = configuration_file.get_int_option( bot, "max_search_depth", BotConfiguration.DEFAULT_MAX_SEARCH_DEPTH, subs=subs) self._max_search_timeout = configuration_file.get_int_option( bot, "max_search_timeout", BotConfiguration.DEFAULT_MAX_SEARCH_TIMEOUT, subs=subs) self._tab_parse_output = configuration_file.get_bool_option( bot, "tab_parse_output", BotConfiguration.DEFAULT_TAB_PARSE_OUTPUT, subs=subs) self._spelling.load_config_section(configuration_file, bot, bot_root, subs=subs) self._conversations.load_config_section(configuration_file, bot, bot_root, subs=subs) self._splitter.load_config_section(configuration_file, bot, bot_root, subs=subs) self._joiner.load_config_section(configuration_file, bot, bot_root, subs=subs) self._from_translator.load_config_section(configuration_file, bot, bot_root, subs=subs) self._to_translator.load_config_section(configuration_file, bot, bot_root, subs=subs) self._sentiment.load_config_section(configuration_file, bot, bot_root, subs=subs) else: YLogger.warning( self, "Config section [%s] missing, using default values", self.section_name) self.load_configurations(configuration_file, bot, bot_root, subs) def load_configurations(self, configuration_file, bot, bot_root, subs: Substitutions = None): if bot is not None: brain_names = configuration_file.get_multi_option( bot, "brain", missing_value="brain") first = True for name in brain_names: if first is True: config = self._brain_configs[0] first = False else: config = BrainConfiguration(name) self._brain_configs.append(config) config.load_configuration(configuration_file, bot_root, subs=subs) self._brain_selector = configuration_file.get_option( bot, "brain_selector", subs=subs) else: YLogger.warning( self, "No brain name defined for bot [%s], defaulting to 'brain'.", self.section_name) brain_name = "brain" self._brain_configs[0]._section_name = brain_name self._brain_configs[0].load_configuration(configuration_file, bot_root, subs=subs) @property def configurations(self): return self._brain_configs @property def brain_selector(self): return self._brain_selector @property def bot_root(self): return self._bot_root @property def default_response(self): return self._default_response @default_response.setter def default_response(self, text): self._default_response = text @property def default_response_srai(self): return self._default_response_srai @default_response_srai.setter def default_response_srai(self, text): self._default_response_srai = text @property def empty_string(self): return self._empty_string @empty_string.setter def empty_string(self, text): self._empty_string = text @property def exit_response(self): return self._exit_response @exit_response.setter def exit_response(self, text): self._exit_response = text @property def exit_response_srai(self): return self._exit_response_srai @exit_response_srai.setter def exit_response_srai(self, text): self._exit_response_srai = text @property def initial_question(self): return self._initial_question @initial_question.setter def initial_question(self, text): self._initial_question = text @property def initial_question_srai(self): return self._initial_question_srai @initial_question_srai.setter def initial_question_srai(self, text): self._initial_question_srai = text @property def override_properties(self): return self._override_properties @override_properties.setter def override_properties(self, override): self._override_properties = override @property def max_question_recursion(self): return self._max_question_recursion @property def max_question_timeout(self): return self._max_question_timeout @property def max_search_depth(self): return self._max_search_depth @property def max_search_timeout(self): return self._max_search_timeout @property def tab_parse_output(self): return self._tab_parse_output @property def spelling(self): return self._spelling @property def conversations(self): return self._conversations @property def splitter(self): return self._splitter @property def joiner(self): return self._joiner @property def from_translator(self): return self._from_translator @property def to_translator(self): return self._to_translator @property def sentiment_analyser(self): return self._sentiment def to_yaml(self, data, defaults=True): data['bot_root'] = self.bot_root data['default_response'] = self.default_response data['default_response_srai'] = self.default_response_srai data['exit_response'] = self.exit_response data['exit_response_srai'] = self.exit_response_srai data['initial_question'] = self.initial_question data['initial_question_srai'] = self.initial_question_srai data['empty_string'] = self.empty_string data['override_properties'] = self.override_properties data['max_question_recursion'] = self.max_question_recursion data['max_question_timeout'] = self.max_question_timeout data['max_search_depth'] = self.max_search_depth data['max_search_timeout'] = self.max_search_timeout data['tab_parse_output'] = self.tab_parse_output self.config_to_yaml(data, BotSpellingConfiguration(), defaults) self.config_to_yaml(data, BotConversationsConfiguration(), defaults) self.config_to_yaml(data, BotSentenceSplitterConfiguration(), defaults) self.config_to_yaml(data, BotSentenceJoinerConfiguration(), defaults) self.config_to_yaml(data, BotTranslatorConfiguration(name="from_translator"), defaults) self.config_to_yaml(data, BotTranslatorConfiguration(name="to_translator"), defaults) self.config_to_yaml(data, BotSentimentAnalyserConfiguration(), defaults)