def test_with_no_data(self): yaml = YamlConfigurationFile() self.assertIsNotNone(yaml) yaml.load_from_text(""" bot: """, ConsoleConfiguration(), ".") console_config = yaml.get_section("console") triggers_config = TriggerConfiguration() triggers_config.load_config_section(yaml, console_config, ".") self.assertEquals("programy.triggers.local.LocalTriggerManager", triggers_config.manager)
def test_with_additional_data(self): yaml = YamlConfigurationFile() self.assertIsNotNone(yaml) yaml.load_from_text( """ console: triggers: manager: programy.triggers.rest.RestTriggerManager url: http://localhost:8989/api/v1.0/trigger method: POST token: 123BC4F3D """, ConsoleConfiguration(), ".") console_config = yaml.get_section("console") triggers_config = TriggerConfiguration() triggers_config.load_config_section(yaml, console_config, ".") self.assertEquals("programy.triggers.rest.RestTriggerManager", triggers_config.manager) self.assertEquals(triggers_config.value("url"), "http://localhost:8989/api/v1.0/trigger") self.assertEquals(triggers_config.value("method"), "POST") self.assertEquals(triggers_config.value("token"), "123BC4F3D")
class ClientConfigurationData(BaseContainerConfigurationData): def __init__(self, name): BaseContainerConfigurationData.__init__(self, name) self._description = 'ProgramY AIML2.0 Client' self._bot_configs = [] self._bot_configs.append(BotConfiguration("bot")) self._bot_selector = None self._renderer = None self._scheduler = SchedulerConfiguration() self._storage = StorageConfiguration() self._email = EmailConfiguration() self._triggers = TriggerConfiguration() @property def description(self): return self._description @property def configurations(self): return self._bot_configs @property def bot_selector(self): return self._bot_selector @property def scheduler(self): return self._scheduler @property def storage(self): return self._storage @property def renderer(self): return self._renderer @property def email(self): return self._email @property def triggers(self): return self._triggers 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): client = configuration_file.get_section(self.section_name) if client is None: YLogger.error( None, 'Client section named [%s] not found, trying "client"', self.section_name) client = configuration_file.get_section('client') if client is not None: self.load_configuration_section(configuration_file, client, bot_root, subs) else: YLogger.error(None, 'No client section not found!') def load_configuration_section(self, configuration_file, section, bot_root, subs: Substitutions = None): assert (configuration_file is not None) if section is not None: self._description = configuration_file.get_option( section, "description", missing_value='ProgramY AIML2.0 Client', subs=subs) bot_names = configuration_file.get_multi_option( section, "bot", missing_value="bot", subs=subs) first = True for name in bot_names: if first is True: config = self._bot_configs[0] first = False else: config = BotConfiguration(name) self._bot_configs.append(config) config.load_configuration(configuration_file, bot_root, subs=subs) self._bot_selector = configuration_file.get_option( section, "bot_selector", missing_value="programy.clients.client.DefaultBotSelector", subs=subs) self._scheduler.load_config_section(configuration_file, section, bot_root, subs=subs) self._storage.load_config_section(configuration_file, section, bot_root, subs=subs) self._renderer = configuration_file.get_option(section, "renderer", subs=subs) self._email.load_config_section(configuration_file, section, bot_root, subs=subs) self._triggers.load_config_section(configuration_file, section, bot_root, subs=subs) else: YLogger.warning( self, "No bot name defined for client [%s], defaulting to 'bot'.", self.section_name) self._bot_configs[0]._section_name = "bot" self._bot_configs[0].load_configuration(configuration_file, bot_root, subs=subs) def to_yaml(self, data, defaults=True): assert (data is not None) if defaults is True: data['description'] = 'ProgramY AIML2.0 Client' data['bot'] = 'bot' data['bot_selector'] = "programy.clients.client.DefaultBotSelector" data['renderer'] = "programy.clients.render.text.TextRenderer" else: data['description'] = self._description data['bot'] = self._bot_configs[0].id data['bot_selector'] = self.bot_selector data['renderer'] = self.renderer data[self._scheduler.id] = {} self._scheduler.to_yaml(data[self._scheduler.id], defaults) data['email'] = {} self._email.to_yaml(data['email'], defaults) data['triggers'] = {} self._triggers.to_yaml(data['triggers'], defaults)
class ClientConfigurationData(BaseContainerConfigurationData): def __init__(self, name): BaseContainerConfigurationData.__init__(self, name) self._description = 'ProgramY AIML2.0 Client' self._renderer = self._get_renderer_class() self._scheduler = SchedulerConfiguration() self._storage = StorageConfiguration() self._email = EmailConfiguration() self._triggers = TriggerConfiguration() self._responder = PingResponderConfig() self._bot_selector = self._get_bot_selector_class() bot_config = BotConfiguration('bot') self._bot_configs = [bot_config] def _get_renderer_class(self): return "programy.clients.render.text.TextRenderer" def _get_bot_selector_class(self): return "programy.clients.botfactory.DefaultBotSelector" @property def description(self): return self._description @property def configurations(self): return self._bot_configs @property def bot_selector(self): return self._bot_selector @property def scheduler(self): return self._scheduler @property def storage(self): return self._storage @property def renderer(self): return self._renderer @property def email(self): return self._email @property def triggers(self): return self._triggers @property def responder(self): return self._responder def load_configuration(self, configuration_file, bot_root, subs: Substitutions = None): client = configuration_file.get_section(self.section_name) if client is None: YLogger.error( None, 'Client section named [%s] not found, trying "client"', self.section_name) client = configuration_file.get_section('client') if client is not None: self.load_configuration_section(configuration_file, client, bot_root, subs) else: YLogger.error(None, 'No client section not found!') def load_configuration_section(self, configuration_file, section, bot_root, subs: Substitutions = None): assert configuration_file is not None assert section is not None self._description = configuration_file.get_option( section, "description", missing_value='ProgramY AIML2.0 Client', subs=subs) self._scheduler.load_config_section(configuration_file, section, bot_root, subs=subs) self._storage.load_config_section(configuration_file, section, bot_root, subs=subs) self._renderer = configuration_file.get_option(section, "renderer", subs=subs) self._email.load_config_section(configuration_file, section, bot_root, subs=subs) self._triggers.load_config_section(configuration_file, section, bot_root, subs=subs) self._responder.load_config_section(configuration_file, section, bot_root, subs=subs) self._load_bot_configurations(configuration_file, section, bot_root, subs) 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) def to_yaml(self, data, defaults=True): assert data is not None if defaults is True: data['description'] = 'ProgramY AIML2.0 Client' data[ 'bot_selector'] = "programy.clients.botfactory.DefaultBotSelector" data['scheduler'] = {} self._scheduler.to_yaml(data['scheduler'], defaults) data['email'] = {} self._email.to_yaml(data['email'], defaults) data['triggers'] = {} self._triggers.to_yaml(data['triggers'], defaults) data['responder'] = {} self._responder.to_yaml(data['responder'], defaults) data['renderer'] = "programy.clients.render.text.TextRenderer" data['storage'] = {} self._storage.to_yaml(data['storage'], defaults) data['bots'] = {} data['bots']['bot'] = {} bot_config = BotConfiguration('bot') bot_config.to_yaml(data['bots']['bot'], defaults) else: data['description'] = self._description data['bot_selector'] = self.bot_selector data[self._scheduler.id] = {} self._scheduler.to_yaml(data[self._scheduler.id], defaults) data['email'] = {} self._email.to_yaml(data['email'], defaults) data['triggers'] = {} self._triggers.to_yaml(data['triggers'], defaults) data['responder'] = {} self._responder.to_yaml(data['responder'], defaults) data['renderer'] = self.renderer data['storage'] = {} self._storage.to_yaml(data['storage'], defaults) data['bots'] = {} for botconfig in self._bot_configs: data['bots'][botconfig.id] = {} botconfig.to_yaml(data['bots'][botconfig.id], defaults)