Пример #1
0
    def test_load_save_binaries(self):

        yaml = YamlConfigurationFile()
        self.load_os_specific_configuration(yaml, "test_secure_brain.yaml",
                                            "test_secure_brain.windows.yaml")

        brains_section = yaml.get_section("brains")
        brain_section = yaml.get_section("brain", brains_section)

        brain_config = BrainConfiguration()
        brain_config.load_configuration(yaml, brain_section, ".")

        brain_config.binaries._save_binary = True
        brain_config.binaries._load_binary = False

        client = TestClient()
        client_context = client.create_client_context("testid")

        brain1 = Brain(client_context.bot, brain_config)
        self.assertIsNotNone(brain1)

        brain_config.binaries._save_binary = False
        brain_config.binaries._load_binary = True

        brain2 = Brain(client_context.bot, brain_config)
        self.assertIsNotNone(brain2)
Пример #2
0
    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)
Пример #3
0
    def test_brain_init_with_secure_config(self):

        yaml = YamlConfigurationFile()
        self.load_os_specific_configuration(yaml, "test_secure_brain.yaml",
                                            "test_secure_brain.windows.yaml")

        brain_config = BrainConfiguration()
        brain_config.load_configuration(yaml, os.path.dirname(__file__))

        brain = Brain(None, brain_config)
        self.assertIsNotNone(brain)

        self.assertIsNotNone(brain.aiml_parser)
        self.assertIsNotNone(brain.denormals)
        self.assertIsNotNone(brain.normals)
        self.assertIsNotNone(brain.genders)
        self.assertIsNotNone(brain.persons)
        self.assertIsNotNone(brain.person2s)
        self.assertIsNotNone(brain.properties)
        self.assertIsNotNone(brain.rdf)
        self.assertIsNotNone(brain.sets)
        self.assertIsNotNone(brain.maps)
        self.assertIsNotNone(brain.preprocessors)
        self.assertIsNotNone(brain.postprocessors)
        self.assertIsNotNone(brain.authentication)
        self.assertIsNotNone(brain.authorisation)
        self.assertIsNone(brain.default_oob)
        self.assertEquals({}, brain.oobs)
Пример #4
0
    def test_brain_init_with_secure_config(self):

        yaml = YamlConfigurationFile()
        self.load_os_specific_configuration(yaml, "test_secure_brain.yaml", "test_secure_brain.windows.yaml")

        brain_config = BrainConfiguration()
        brain_config.load_configuration(yaml, os.path.dirname(__file__))

        client = TestClient()
        client_context = client.create_client_context("testid")
        brain = Brain(client_context.bot, brain_config)
        self.assertIsNotNone(brain)

        self.assertIsNotNone(brain.aiml_parser)
        self.assertIsNotNone(brain.denormals)
        self.assertIsNotNone(brain.normals)
        self.assertIsNotNone(brain.genders)
        self.assertIsNotNone(brain.persons)
        self.assertIsNotNone(brain.person2s)
        self.assertIsNotNone(brain.properties)
        self.assertIsNotNone(brain.rdf)
        self.assertIsNotNone(brain.sets)
        self.assertIsNotNone(brain.maps)
        self.assertIsNotNone(brain.preprocessors)
        self.assertIsNotNone(brain.postprocessors)
        self.assertIsNotNone(brain.security)
Пример #5
0
    def test_selection_multi_brain(self):

        client = TestClient()

        bot = Bot(BotConfiguration(), client)

        brain1 = Brain(bot, BrainConfiguration())
        brain2 = Brain(bot, BrainConfiguration())
        brain3 = Brain(bot, BrainConfiguration())
        brains = {"brain1": brain1, "brain2": brain2, "brain3": brain3}

        config = ClientConfigurationData(name="test")
        selector = DefaultBrainSelector(config, brains)

        selected = selector.select_brain()
        self.assertIsNotNone(selected)
        self.assertEqual(selected, brain1)

        selected = selector.select_brain()
        self.assertIsNotNone(selected)
        self.assertEqual(selected, brain2)

        selected = selector.select_brain()
        self.assertIsNotNone(selected)
        self.assertEqual(selected, brain3)

        selected = selector.select_brain()
        self.assertIsNotNone(selected)
        self.assertEqual(selected, brain1)
Пример #6
0
    def test_format_message_with_client_and_bot_and_brain(self):
        brain_config = BrainConfiguration()
        brain_config._section_name = "testbrain"
        brain = Brain(None, brain_config)

        msg = YLogger.format_message(brain, "Test Message")
        self.assertIsNotNone(msg)
        self.assertEquals("[] [] [testbrain] - Test Message", msg)
Пример #7
0
    def test_format_message_with_client_and_bot_and_brain(self):
        brain_config = BrainConfiguration()
        brain_config._section_name = "testbrain"
        brain = Brain(None, brain_config)

        msg = YLogger.format_message(brain, "Test Message")
        self.assertIsNotNone(msg)
        self.assertEquals("[] [] [testbrain] - Test Message", msg)
Пример #8
0
    def test_with_data(self):
        yaml = YamlConfigurationFile()
        self.assertIsNotNone(yaml)
        yaml.load_from_text(
            """
brain:

    # Overrides
    overrides:
      allow_system_aiml: true
      allow_learn_aiml: true
      allow_learnf_aiml: true

    # Defaults
    defaults:
      default_get: unknown
      default_property: unknown
      default_map: unknown
      learnf_path: file

    # Binary
    binaries:
      save_binary: true
      load_binary: true
      load_aiml_on_binary_fail: true

    # Braintree
    braintree:
      create: true

    security:
        authentication:
            classname: programy.security.authenticate.passthrough.BasicPassThroughAuthenticationService
            denied_srai: AUTHENTICATION_FAILED
        authorisation:
            classname: programy.security.authorise.usergroupsauthorisor.BasicUserGroupAuthorisationService
            denied_srai: AUTHORISATION_FAILED
            usergroups:
              storage: file

    dynamic:
        variables:
            gettime: programy.dynamic.variables.datetime.GetTime
        sets:
            numeric: programy.dynamic.sets.numeric.IsNumeric
            roman:   programy.dynamic.sets.roman.IsRomanNumeral
        maps:
            romantodec: programy.dynamic.maps.roman.MapRomanToDecimal
            dectoroman: programy.dynamic.maps.roman.MapDecimalToRoman

        """, ConsoleConfiguration(), ".")

        brain_section = yaml.get_section("brain")

        brain_configuration = BrainConfiguration()
        brain_configuration.load_configuration(yaml, brain_section, ".")

        BrainConfigurationTests.assert_brain_config(self, brain_configuration)
Пример #9
0
    def test_format_message_with_client_and_default_bot_and_brain(self):
        brain_config = BrainConfiguration()
        client = TestClient()
        context = client.create_client_context("testid")

        brain_config._section_name = "testbrain"
        brain = Brain(context.bot, brain_config)

        msg = YLogger.format_message(brain, "Test Message")
        self.assertIsNotNone(msg)
        self.assertEqual("[testclient] [bot] [testbrain] - Test Message", msg)
Пример #10
0
    def test_brain_init_with_secure_config(self):

        yaml = YamlConfigurationFile()
        self.load_os_specific_configuration(yaml, "test_secure_brain.yaml",
                                            "test_secure_brain.windows.yaml")

        brain_config = BrainConfiguration()
        brain_config.load_configuration(yaml, os.path.dirname(__file__))

        brain = Brain(None, brain_config)
        self.assertIsNotNone(brain)
Пример #11
0
    def test_oob_processing(self):

        yaml = YamlConfigurationFile()
        self.load_os_specific_configuration(yaml, "test_brain.yaml",
                                            "test_brain.windows.yaml")

        brain_config = BrainConfiguration()
        brain_config.load_configuration(yaml, ".")

        brain = Brain(None, brain_config)

        self.assertEqual("", brain.process_oob("console", "<oob></oob>"))
Пример #12
0
    def test_load_tokenizer_no_class(self):

        config = BrainConfiguration()
        self.assertIsNotNone(config)
        tokenizer_config = BrainTokenizerConfiguration()
        self.assertIsNotNone(tokenizer_config)
        tokenizer_config._classname = None
        tokenizer_config._punctation_chars = ''
        config._tokenizer = tokenizer_config

        tokenizer = Tokenizer.load_tokenizer(config)
        self.assertIsNotNone(tokenizer)
        self.assertIsInstance(tokenizer, Tokenizer)
Пример #13
0
    def test_load_tokenizer(self):

        config = BrainConfiguration()
        self.assertIsNotNone(config)
        tokenizer_config = BrainTokenizerConfiguration()
        self.assertIsNotNone(tokenizer_config)
        tokenizer_config._classname = 'programy.dialog.tokenizer.tokenizer.Tokenizer'
        tokenizer_config._punctation_chars = ''
        config._tokenizer = tokenizer_config

        tokenizer = Tokenizer.load_tokenizer(config)
        self.assertIsNotNone(tokenizer)
        self.assertIsInstance(tokenizer, Tokenizer)
Пример #14
0
    def test_format_message_with_client_and_bot_and_brain(self):
        client = TestClient()

        bot_config = BotConfiguration()
        bot_config._section_name = "testbot"
        bot = Bot(bot_config, client)

        brain_config = BrainConfiguration()
        brain_config._section_name = "testbrain"
        brain = Brain(bot, brain_config)

        msg = YLogger.format_message(brain, "Test Message")
        self.assertIsNotNone(msg)
        self.assertEquals("[testclient] [testbot] [testbrain] - Test Message", msg)
Пример #15
0
    def test_format_message_with_client_and_bot_and_brain(self):
        client = TestClient()

        bot_config = BotConfiguration()
        bot_config._section_name = "testbot"
        bot = Bot(bot_config, client)

        brain_config = BrainConfiguration()
        brain_config._section_name = "testbrain"
        brain = Brain(bot, brain_config)

        msg = YLogger.format_message(brain, "Test Message")
        self.assertIsNotNone(msg)
        self.assertEquals("[testclient] [testbot] [testbrain] - Test Message", msg)
Пример #16
0
    def test_oob_loading(self):

        yaml = YamlConfigurationFile()
        self.load_os_specific_configuration(yaml, "test_brain.yaml",
                                            "test_brain.windows.yaml")

        brain_config = BrainConfiguration()
        brain_config.load_configuration(yaml, ".")

        brain = Brain(None, brain_config)

        self.assertIsInstance(brain.default_oob, DefaultOutOfBandProcessor)
        self.assertIsInstance(brain.oobs['dial'], DialOutOfBandProcessor)
        self.assertIsInstance(brain.oobs['email'], EmailOutOfBandProcessor)
Пример #17
0
    def test_oob_loading(self):

        yaml = YamlConfigurationFile()
        self.load_os_specific_configuration(yaml, "test_brain.yaml", "test_brain.windows.yaml")

        brain_config = BrainConfiguration()
        brain_config.load_configuration(yaml, ".")

        client = TestClient()
        client_context = client.create_client_context("testid")
        brain = Brain(client_context.bot, brain_config)

        self.assertIsInstance(brain._oobhandler.default_oob, DefaultOutOfBandProcessor)
        self.assertIsInstance(brain._oobhandler.oobs['dial'], DialOutOfBandProcessor)
        self.assertIsInstance(brain._oobhandler.oobs['email'], EmailOutOfBandProcessor)
Пример #18
0
    def test_call_GeneralRest(self):
        service_config = BrainServiceConfiguration("__PUBLISHEDREST__")
        service_config._classname = 'programytest.services.test_service.MockService'
        brain_config = BrainConfiguration()
        brain_config.services._services['__PUBLISHEDREST__'] = service_config
        ServiceFactory.preload_services(brain_config.services)

        root = TemplateNode()
        node = TemplateSRAIXNode()
        node._host = TemplateWordNode("hostname")
        node._method = TemplateWordNode("POST")
        node._query = TemplateWordNode('"userid":"1234567890"')
        node._header = TemplateWordNode('"Content-Type":"application/json"')
        node._body = TemplateWordNode("Hello")
        root.append(node)

        self.assertEqual("asked", node.resolve(self._client_context))

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

        self.assertEqual("asked", node.resolve(self._client_context))
        self.assertEqual("asked", question.property('__SUBAGENT_BODY__'))
Пример #19
0
    def test_reload_unknowns(self):

        yaml = YamlConfigurationFile()
        self.load_os_specific_configuration(yaml, "test_brain.yaml",
                                            "test_brain.windows.yaml")

        brain_config = BrainConfiguration()
        brain_config.load_configuration(yaml, ".")

        client = TestClient()
        client_context = client.create_client_context("testid")
        brain = Brain(client_context.bot, brain_config)

        brain.reload_map("Unknown")
        brain.reload_set("Unknown")
        brain.reload_rdf("Unknown")
Пример #20
0
    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)
Пример #21
0
    def test_call_GeneralRest_response_empty(self):
        service_config = BrainServiceConfiguration("__PUBLISHEDREST__")
        service_config._classname = 'programytest.services.test_service.MockService'
        brain_config = BrainConfiguration()
        brain_config.services._services['__PUBLISHEDREST__'] = service_config
        ServiceFactory.preload_services(brain_config.services)

        root = TemplateNode()
        node = TemplateSRAIXNode()
        node._host = TemplateWordNode("hostname")
        root.append(node)

        service = ServiceFactory.get_service("__PUBLISHEDREST__")
        service.set_response("")

        self.assertEqual("", node.resolve(self._client_context))

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

        self.assertEqual("", node.resolve(self._client_context))
Пример #22
0
    def _load_bot_configurations(self, configuration_file, section, bot_root,
                                 subs):
        bots = configuration_file.get_section("bots", section)
        if bots is not None:
            bot_keys = configuration_file.get_keys(bots)
            first = True
            for name in bot_keys:
                if first is True:
                    self._bot_configs.clear()
                    first = False
                bot_config = configuration_file.get_section(name, bots)
                config = BotConfiguration(name)
                config.load_configuration_section(configuration_file,
                                                  bot_config,
                                                  bot_root,
                                                  subs=subs)
                self._bot_configs.append(config)

        if len(self._bot_configs) == 0:
            YLogger.warning(
                self,
                "No bot name defined for client [%s], defaulting to 'bot'.",
                self.section_name)
            self._bot_configs.append(BotConfiguration("bot"))
            self._bot_configs[0].configurations.append(
                BrainConfiguration("brain"))

        self._bot_selector = configuration_file.get_option(
            section,
            "bot_selector",
            missing_value="programy.clients.botfactory.DefaultBotSelector",
            subs=subs)
Пример #23
0
    def test_call_PublishedBot_response_default(self):
        service_config = BrainServiceConfiguration("__PUBLISHEDBOT__")
        service_config._classname = 'programytest.services.test_service.MockService'
        brain_config = BrainConfiguration()
        brain_config.services._services['__PUBLISHEDBOT__'] = service_config
        ServiceFactory.preload_services(brain_config.services)

        root = TemplateNode()
        node = TemplateSRAIXNode()
        node._botName = "testbot"
        node._userId = TemplateWordNode('1234567890')
        node._default = "unknown"
        node.append(TemplateWordNode("Hello"))
        root.append(node)

        service = ServiceFactory.get_service("__PUBLISHEDBOT__")
        service.set_response("")

        self.set_collection_botnames()
        self.assertEqual("unknown", node.resolve(self._client_context))

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

        self.assertEqual("unknown", node.resolve(self._client_context))
        self.assertEqual("unknown",
                         question.property('__SUBAGENT_EXTBOT__.testbot'))
Пример #24
0
    def test_call_CustomService_response_default(self):
        service_config = BrainServiceConfiguration("mock")
        service_config._classname = 'programytest.services.test_service.MockService'
        brain_config = BrainConfiguration()
        brain_config.services._services['mock'] = service_config
        ServiceFactory.preload_services(brain_config.services)

        root = TemplateNode()
        node = TemplateSRAIXNode()
        node._service = "mock"
        node._default = "unknown"
        node.append(TemplateWordNode("Hello"))
        root.append(node)

        service = ServiceFactory.get_service("mock")
        service.set_response("")

        self.assertEqual("unknown", node.resolve(self._client_context))

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

        self.assertEqual("unknown", node.resolve(self._client_context))
        self.assertEqual("unknown", question.property('__SUBAGENT__.mock'))
Пример #25
0
 def get_brain_config(self):
     brain_config = BrainConfiguration()
     brain_config.security._authorisation = BrainSecurityConfiguration(
         "authorisation")
     brain_config.security.authorisation._classname = "programy.security.authorise.usergroupsauthorisor.BasicUserGroupAuthorisationService"
     brain_config.security.authorisation._denied_srai = "ACCESS_DENIED"
     brain_config.security.authorisation._usergroups = "$BOT_ROOT/usergroups.yaml"
     return brain_config
Пример #26
0
    def test_brain_init_with_config(self):

        yaml = YamlConfigurationFile()
        self.load_os_specific_configuration(yaml, "test_brain.yaml",
                                            "test_brain.windows.yaml")

        brain_config = BrainConfiguration()
        brain_config.load_configuration(yaml, ".")

        brain = Brain(None, brain_config)
        self.assertIsNotNone(brain)

        self.assertIsNotNone(brain.aiml_parser)
        self.assertIsNotNone(brain.denormals)
        self.assertIsNotNone(brain.normals)
        self.assertIsNotNone(brain.genders)
        self.assertIsNotNone(brain.persons)
        self.assertIsNotNone(brain.person2s)
        self.assertIsNotNone(brain.properties)
        self.assertIsNotNone(brain.rdf)
        self.assertIsNotNone(brain.sets)
        self.assertIsNotNone(brain.maps)
        self.assertIsNotNone(brain.preprocessors)
        self.assertIsNotNone(brain.postprocessors)
        self.assertIsNotNone(brain.authentication)
        self.assertIsNotNone(brain.authorisation)
        self.assertIsNotNone(brain.default_oob)
        self.assertIsNotNone(brain.oobs)

        if os.path.exists(brain_config.binaries.binary_filename):
            os.remove(brain_config.binaries.binary_filename)
        self.assertFalse(os.path.exists(brain_config.binaries.binary_filename))
        brain.save_binary(brain_config)
        self.assertTrue(os.path.exists(brain_config.binaries.binary_filename))
        brain.load_binary(brain_config)

        oob_content = ET.fromstring("<oob><something>other</something></oob>")
        self.assertEqual(
            "",
            brain.default_oob.process_out_of_bounds(self._client_context,
                                                    oob_content))
        oob_content = ET.fromstring("<oob><dial>07777777777</dial></oob>")
        self.assertEqual(
            "",
            brain.oobs['dial'].process_out_of_bounds(self._client_context,
                                                     oob_content))
Пример #27
0
    def test_with_no_data(self):
        yaml = YamlConfigurationFile()
        self.assertIsNotNone(yaml)
        yaml.load_from_text("""
        brain:
        """, ConsoleConfiguration(), ".")

        brain_config = yaml.get_section("brain")

        brain_configuration = BrainConfiguration()
        brain_configuration.load_configuration(yaml, brain_config, ".")

        self.assertFalse(brain_configuration.overrides.allow_system_aiml)
        self.assertFalse(brain_configuration.overrides.allow_learn_aiml)
        self.assertFalse(brain_configuration.overrides.allow_learnf_aiml)

        self.assertIsNotNone(brain_configuration.defaults)
        self.assertEqual(brain_configuration.defaults.default_get, "unknown")
        self.assertEqual(brain_configuration.defaults.default_property,
                         "unknown")
        self.assertEqual(brain_configuration.defaults.default_map, "unknown")

        self.assertIsNotNone(brain_configuration.binaries)
        self.assertFalse(brain_configuration.binaries.save_binary)
        self.assertFalse(brain_configuration.binaries.load_binary)
        self.assertFalse(brain_configuration.binaries.load_aiml_on_binary_fail)

        self.assertIsNotNone(brain_configuration.braintree)
        self.assertFalse(brain_configuration.braintree.create)

        self.assertIsNotNone(brain_configuration.services)

        self.assertFalse(brain_configuration.services.exists('OPENCHAT'))

        self.assertFalse(brain_configuration.services.exists('REST'))

        self.assertIsNotNone(brain_configuration.security)
        self.assertIsNone(brain_configuration.security.authorisation)
        self.assertIsNone(brain_configuration.security.authentication)

        self.assertIsNotNone(brain_configuration.dynamics)
        self.assertIsNotNone(brain_configuration.dynamics.dynamic_sets)

        self.assertIsNotNone(brain_configuration.dynamics.dynamic_maps)
        self.assertIsNotNone(brain_configuration.dynamics.dynamic_vars)
Пример #28
0
    def test_format_message_with_client_context(self):
        client = TestClient()

        bot_config = BotConfiguration()
        bot_config._section_name = "testbot"
        bot = Bot(bot_config, client)

        brain_config = BrainConfiguration()
        brain_config._section_name = "testbrain"
        brain = Brain(bot, brain_config)

        client_context = ClientContext(client, "testuser")
        client_context._bot = bot
        client_context._brain = brain

        msg = YLogger.format_message(client_context, "Test Message")
        self.assertIsNotNone(msg)
        self.assertEqual("[testclient] [testbot] [testbrain] [testuser] - Test Message", msg)
Пример #29
0
    def test_post_process_question_with_processing(self):
        yaml = YamlConfigurationFile()
        self.load_os_specific_configuration(yaml, "test_brain.yaml",
                                            "test_brain.windows.yaml")

        brains_section = yaml.get_section("brains")
        brain_section = yaml.get_section("brain", brains_section)

        brain_config = BrainConfiguration()
        brain_config.load_configuration(yaml, brain_section, ".")

        client = TestClient()
        client_context = client.create_client_context("testid")
        brain = Brain(client_context.bot, brain_config)
        self.assertIsNotNone(brain)

        response = brain.post_process_question(client_context, "Hello")
        self.assertEquals("Other", response)
Пример #30
0
    def test_format_message_with_client_context(self):

        client = TestClient()

        bot_config = BotConfiguration()
        bot_config._section_name = "testbot"
        bot = Bot(bot_config, client)

        brain_config = BrainConfiguration()
        brain_config._section_name = "testbrain"
        brain = Brain(bot, brain_config)

        client_context = ClientContext(client, "testuser")
        client_context._bot = bot
        client_context._brain = brain

        msg = YLogger.format_message(client_context, "Test Message")
        self.assertIsNotNone(msg)
        self.assertEquals("[testclient] [testbot] [testbrain] [testuser] - Test Message", msg)
Пример #31
0
    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)
Пример #32
0
    def test_load_services(self):

        service_config = BrainServiceConfiguration("mock")
        service_config._classname = 'programytest.services.test_service.MockService'

        brain_config = BrainConfiguration()
        brain_config.services._services['mock'] = service_config

        ServiceFactory.preload_services(brain_config.services)

        self.assertIsNotNone(ServiceFactory.get_service("mock"))
        self.assertIsInstance(ServiceFactory.get_service("mock"), MockService)
Пример #33
0
    def test_call_GeneralRest_only_host(self):
        service_config = BrainServiceConfiguration("__PUBLISHEDREST__")
        service_config._classname = 'programytest.services.test_service.MockService'
        brain_config = BrainConfiguration()
        brain_config.services._services['__PUBLISHEDREST__'] = service_config
        ServiceFactory.preload_services(brain_config.services)

        root = TemplateNode()
        node = TemplateSRAIXNode()
        node._host = TemplateWordNode("hostname")
        root.append(node)

        self.assertEqual("asked", node.resolve(self._client_context))
Пример #34
0
    def test_oob_stripping(self):

        yaml = YamlConfigurationFile()
        self.load_os_specific_configuration(yaml, "test_brain.yaml",
                                            "test_brain.windows.yaml")

        brain_config = BrainConfiguration()
        brain_config.load_configuration(yaml, ".")

        brain = Brain(None, brain_config)

        response, oob = brain.strip_oob("<oob>command</oob>")
        self.assertEqual("", response)
        self.assertEqual("<oob>command</oob>", oob)

        response, oob = brain.strip_oob("This <oob>command</oob>")
        self.assertEqual("This ", response)
        self.assertEqual("<oob>command</oob>", oob)

        response, oob = brain.strip_oob("This <oob>command</oob> That")
        self.assertEqual("This That", response)
        self.assertEqual("<oob>command</oob>", oob)
Пример #35
0
    def test_with_data(self):
        yaml = YamlConfigurationFile()
        self.assertIsNotNone(yaml)
        yaml.load_from_text("""
            brain:
                overrides:
                  allow_system_aiml: true
                  allow_learn_aiml: true
                  allow_learnf_aiml: true
            
                defaults:
                  default-get: unknown
                  default-property: unknown
                  default-map: unknown
                  learnf-path: /tmp/learnf

                nodes:
                  pattern_nodes: $BOT_ROOT/config/pattern_nodes.conf
                  template_nodes: $BOT_ROOT/config/template_nodes.conf
            
                binaries:
                  save_binary: false
                  load_binary: false
                  binary_filename: /tmp/y-bot.brain
                  load_aiml_on_binary_fail: false

                braintree:
                  file: /tmp/braintree.xml
                  content: xml
            
                files:
                    aiml:
                        files: $BOT_ROOT/aiml
                        extension: .aiml
                        directories: true
                        errors: /tmp/y-bot_errors.txt
                        duplicates: /tmp/y-bot_duplicates.txt
                        conversation: /tmp/y-bot_conversation.txt
                    sets:
                        files: $BOT_ROOT/sets
                        extension: .txt
                        directories: false
                    maps:
                        files: $BOT_ROOT/maps
                        extension: .txt
                        directories: false
                    denormal: $BOT_ROOT/config/denormal.txt
                    normal: $BOT_ROOT/config/normal.txt
                    gender: $BOT_ROOT/config/gender.txt
                    person: $BOT_ROOT/config/person.txt
                    person2: $BOT_ROOT/config/person2.txt
                    properties: $BOT_ROOT/config/properties.txt
                    triples: $BOT_ROOT/config/triples.txt
                    preprocessors: $BOT_ROOT/config/preprocessors.conf
                    postprocessors: $BOT_ROOT/config/postprocessors.conf
                    regex_templates: $BOT_ROOT/config/regex-templates.txt
            
                security:
                    authentication:
                        classname: programy.security.authenticate.passthrough.PassThroughAuthenticationService
                        denied_srai: AUTHENTICATION_FAILED
                    authorisation:
                        classname: programy.security.authorise.passthrough.PassThroughAuthorisationService
                        denied_srai: AUTHORISATION_FAILED

                oob:
                  default:
                    classname: programy.oob.default.DefaultOutOfBandProcessor
                  dial:
                    classname: programy.oob.dial.DialOutOfBandProcessor
                  email:
                    classname: programy.oob.email.EmailOutOfBandProcessor

                dynamic:
                    variables:
                        gettime: programy.dynamic.variables.datetime.GetTime
                    sets:
                        number: programy.dynamic.sets.numeric.IsNumeric
                        roman:   programy.dynamic.sets.roman.IsRomanNumeral
                    maps:
                        romantodec: programy.dynamic.maps.roman.MapRomanToDecimal
                        dectoroman: programy.dynamic.maps.roman.MapDecimalToRoman

                services:
                    REST:
                        classname: programy.services.rest.GenericRESTService
                        method: GET
                        host: 0.0.0.0
                    Pannous:
                        classname: programy.services.pannous.PannousService
                        url: http://weannie.pannous.com/api
                    Pandora:
                        classname: programy.services.pandora.PandoraService
                        url: http://www.pandorabots.com/pandora/talk-xml
                    Wikipedia:
                        classname: programy.services.wikipediaservice.WikipediaService        
        """, ConsoleConfiguration(), ".")

        brain_config = BrainConfiguration()
        brain_config.load_configuration(yaml, ".")

        self.assertIsNotNone(brain_config.overrides)
        self.assertTrue(brain_config.overrides.allow_system_aiml)
        self.assertTrue(brain_config.overrides.allow_learn_aiml)
        self.assertTrue(brain_config.overrides.allow_learnf_aiml)

        self.assertIsNotNone(brain_config.defaults)
        self.assertEqual("unknown", brain_config.defaults.default_get)
        self.assertEqual("unknown", brain_config.defaults.default_property)
        self.assertEqual("unknown", brain_config.defaults.default_map)
        self.assertEqual("/tmp/learnf", brain_config.defaults.learnf_path)

        self.assertIsNotNone(brain_config.nodes)
        self.assertEquals("./config/pattern_nodes.conf", brain_config.nodes.pattern_nodes)
        self.assertEquals("./config/template_nodes.conf", brain_config.nodes.template_nodes)

        self.assertIsNotNone(brain_config.binaries)
        self.assertFalse(brain_config.binaries.save_binary)
        self.assertFalse(brain_config.binaries.load_binary)
        self.assertEquals("/tmp/y-bot.brain", brain_config.binaries.binary_filename)
        self.assertFalse(brain_config.binaries.load_aiml_on_binary_fail)

        self.assertIsNotNone(brain_config.braintree)
        self.assertEquals("/tmp/braintree.xml", brain_config.braintree.file)
        self.assertEquals("xml", brain_config.braintree.content)

        self.assertIsNotNone(brain_config.files)
        self.assertIsNotNone(brain_config.files.aiml_files)
        self.assertEqual(["./aiml"], brain_config.files.aiml_files.files)
        self.assertEqual(".aiml", brain_config.files.aiml_files.extension)
        self.assertTrue(brain_config.files.aiml_files.directories)
        self.assertEqual("/tmp/y-bot_errors.txt", brain_config.files.aiml_files.errors.filename)
        self.assertEqual("/tmp/y-bot_duplicates.txt", brain_config.files.aiml_files.duplicates.filename)
        self.assertEqual("/tmp/y-bot_conversation.txt", brain_config.files.aiml_files.conversation.filename)

        self.assertIsNotNone(brain_config.files.set_files)
        self.assertEqual(["./sets"], brain_config.files.set_files.files)
        self.assertEqual(".txt", brain_config.files.set_files.extension)
        self.assertFalse(brain_config.files.set_files.directories)

        self.assertIsNotNone(brain_config.files.map_files)
        self.assertEqual(["./maps"], brain_config.files.map_files.files)
        self.assertEqual(".txt", brain_config.files.map_files.extension)
        self.assertFalse(brain_config.files.map_files.directories)

        self.assertEqual(brain_config.files.denormal, "./config/denormal.txt")
        self.assertEqual(brain_config.files.normal, "./config/normal.txt")
        self.assertEqual(brain_config.files.gender, "./config/gender.txt")
        self.assertEqual(brain_config.files.person, "./config/person.txt")
        self.assertEqual(brain_config.files.person2, "./config/person2.txt")
        self.assertEqual(brain_config.files.properties, "./config/properties.txt")
        self.assertEqual(brain_config.files.triples, "./config/triples.txt")
        self.assertEqual(brain_config.files.preprocessors, "./config/preprocessors.conf")
        self.assertEqual(brain_config.files.postprocessors, "./config/postprocessors.conf")
        self.assertEqual(brain_config.files.regex_templates, "./config/regex-templates.txt")

        self.assertIsNotNone(brain_config.security)
        self.assertIsNotNone(brain_config.security.authorisation)
        self.assertIsNotNone(brain_config.security.authentication)

        self.assertIsNotNone(brain_config.services)
        self.assertTrue(brain_config.services.exists("REST"))
        self.assertTrue(brain_config.services.exists("Pannous"))
        self.assertTrue(brain_config.services.exists("Pandora"))
        self.assertTrue(brain_config.services.exists("Wikipedia"))
        self.assertFalse(brain_config.services.exists("Other"))

        self.assertIsNotNone(brain_config.oob)
        self.assertIsNotNone(brain_config.oob.oobs())
        self.assertIsNotNone(brain_config.oob.default())
        self.assertIsNotNone(brain_config.oob.oob("dial"))
        self.assertIsNotNone(brain_config.oob.oob("email"))

        self.assertIsNotNone(brain_config.dynamics)
        self.assertIsNotNone(brain_config.dynamics.dynamic_sets)
        self.assertTrue("NUMBER" in brain_config.dynamics.dynamic_sets)
        self.assertTrue("ROMAN" in brain_config.dynamics.dynamic_sets)
        self.assertIsNotNone(brain_config.dynamics.dynamic_maps)
        self.assertTrue("ROMANTODEC" in brain_config.dynamics.dynamic_maps)
        self.assertTrue("DECTOROMAN" in brain_config.dynamics.dynamic_maps)
        self.assertIsNotNone(brain_config.dynamics.dynamic_vars)
        self.assertTrue("GETTIME" in brain_config.dynamics.dynamic_vars)