def load_triggers(self, storage_factory: StorageFactory): assert isinstance(storage_factory, StorageFactory) YLogger.debug(self, "Loading Triggers") if storage_factory.entity_storage_engine_available( StorageFactory.TRIGGERS) is True: trigger_engine = storage_factory.entity_storage_engine( StorageFactory.TRIGGERS) if trigger_engine: try: triggers_store = trigger_engine.triggers_store() triggers_store.load_all(self) except Exception as e: YLogger.exception(self, "Failed to load triggers from storage", e)
def test_save_to_file(self): config = FileStorageConfiguration() config._rdf_storage = FileStoreConfiguration(dirs=[ os.path.dirname(__file__) + os.sep + "test_files" + os.sep + "rdfs" ]) tmpdir = os.path.dirname(__file__) + os.sep + "rdf_updates" filepath = tmpdir + os.sep + "rdf_data.txt" config.rdf_updates_storage._dirs = [tmpdir] config.rdf_updates_storage._has_single_file = True factory = StorageFactory() storage_engine = FileStorageEngine(config) factory._storage_engines[StorageFactory.RDF] = storage_engine factory._store_to_engine_map[StorageFactory.RDF] = storage_engine factory._storage_engines[StorageFactory.RDF_UPDATES] = storage_engine factory._store_to_engine_map[ StorageFactory.RDF_UPDATES] = storage_engine storage_engine.initialise() updates_engine = factory.entity_storage_engine( StorageFactory.RDF_UPDATES) updates_store = updates_engine.rdf_updates_store() updates_store.empty() collection = RDFCollection() self.assertIsNotNone(collection) collection.save_rdf_data() self.assertFalse(os.path.exists(filepath)) collection.load(factory) self.assertTrue(collection.has_subject("TEST1")) self.assertTrue(collection.has_predicate("TEST1", "HASPURPOSE")) self.assertTrue(collection.has_object("TEST1", "HASPURPOSE", "to test")) collection.save_rdf_data() self.assertTrue(os.path.exists(filepath)) updates_store.empty() self.assertFalse(os.path.exists(filepath))
def test_initialise_with_config_file_only(self): yaml = YamlConfigurationFile() self.assertIsNotNone(yaml) yaml.load_from_text( """ console: storage: entities: users: file linked_accounts: file links: file properties: file conversations: file categories: file stores: file: type: file config: storage_dir: ./storage properties_storage: ./storage/properties conversations_storage: ./storage/conversations """, ConsoleConfiguration(), ".") bot_config = yaml.get_section("console") storage_config = StorageConfiguration() storage_config.load_config_section(yaml, bot_config, ".") factory = StorageFactory() factory.load_engines_from_config(storage_config) self.assertFalse(factory.storage_engine_available("sql")) self.assertFalse(factory.storage_engine_available("mongo")) self.assertFalse(factory.storage_engine_available("redis")) self.assertFalse(factory.storage_engine_available("logger")) self.assertTrue(factory.storage_engine_available("file")) self.assertTrue(factory.entity_storage_engine_available("users")) self.assertIsInstance(factory.entity_storage_engine("users"), FileStorageEngine) self.assertTrue( factory.entity_storage_engine_available("linked_accounts")) self.assertIsInstance(factory.entity_storage_engine("linked_accounts"), FileStorageEngine) self.assertTrue(factory.entity_storage_engine_available("links")) self.assertIsInstance(factory.entity_storage_engine("links"), FileStorageEngine) self.assertTrue(factory.entity_storage_engine_available("properties")) self.assertIsInstance(factory.entity_storage_engine("properties"), FileStorageEngine) self.assertTrue( factory.entity_storage_engine_available("conversations")) self.assertIsInstance(factory.entity_storage_engine("conversations"), FileStorageEngine) self.assertTrue(factory.entity_storage_engine_available("categories")) self.assertIsInstance(factory.entity_storage_engine("categories"), FileStorageEngine) self.assertFalse(factory.entity_storage_engine_available("other")) self.assertIsNone(factory.entity_storage_engine("other"))
def test_initialise_with_config_mixed(self): yaml = YamlConfigurationFile() self.assertIsNotNone(yaml) yaml.load_from_text( """ console: storage: entities: users: sql linked_accounts: sql links: sql properties: redis conversations: mongo categories: sql stores: sql: type: sql config: url: sqlite:///:memory echo: false encoding: utf-8 create_db: true drop_all_first: true mongo: type: mongo config: url: mongodb://localhost:27017/ database: programy drop_all_first: true redis: type: redis config: host: localhost port: 6379 password: null db: 0 prefix: programy drop_all_first: True file: type: file config: storage_dir: ./storage properties_storage: ./storage/properties conversations_storage: ./storage/conversations logger: type: logger config: conversation_logger: conversation """, ConsoleConfiguration(), ".") bot_config = yaml.get_section("console") storage_config = StorageConfiguration() storage_config.load_config_section(yaml, bot_config, ".") factory = StorageFactory() factory.load_engines_from_config(storage_config) self.assertTrue(factory.storage_engine_available("sql")) self.assertIsInstance(factory.storage_engine("sql"), MongoStorageEngine) self.assertTrue(factory.storage_engine_available("mongo")) self.assertIsInstance(factory.storage_engine("mongo"), MongoStorageEngine) self.assertTrue(factory.storage_engine_available("redis")) self.assertIsInstance(factory.storage_engine("redis"), RedisStorageEngine) self.assertTrue(factory.storage_engine_available("file")) self.assertIsInstance(factory.storage_engine("file"), FileStorageEngine) self.assertTrue(factory.storage_engine_available("logger")) self.assertIsInstance(factory.storage_engine("logger"), LoggerStorageEngine) self.assertFalse(factory.storage_engine_available("other")) self.assertIsNone(factory.storage_engine("other")) self.assertTrue(factory.entity_storage_engine_available("users")) self.assertIsInstance(factory.entity_storage_engine("users"), SQLStorageEngine) self.assertTrue( factory.entity_storage_engine_available("linked_accounts")) self.assertIsInstance(factory.entity_storage_engine("linked_accounts"), SQLStorageEngine) self.assertTrue(factory.entity_storage_engine_available("links")) self.assertIsInstance(factory.entity_storage_engine("links"), SQLStorageEngine) self.assertTrue(factory.entity_storage_engine_available("properties")) self.assertIsInstance(factory.entity_storage_engine("properties"), RedisStorageEngine) self.assertTrue( factory.entity_storage_engine_available("conversations")) self.assertIsInstance(factory.entity_storage_engine("conversations"), MongoStorageEngine) self.assertTrue(factory.entity_storage_engine_available("categories")) self.assertIsInstance(factory.entity_storage_engine("categories"), SQLStorageEngine) self.assertFalse(factory.entity_storage_engine_available("other")) self.assertIsNone(factory.entity_storage_engine("other"))
def test_initialise_with_config_mongo(self): yaml = YamlConfigurationFile() self.assertIsNotNone(yaml) yaml.load_from_text( """ console: storage: entities: users: mongo linked_accounts: mongo links: mongo properties: mongo conversations: mongo categories: mongo stores: mongo: type: mongo config: url: mongodb://localhost:27017/ database: programy drop_all_first: true """, ConsoleConfiguration(), ".") bot_config = yaml.get_section("console") storage_config = StorageConfiguration() storage_config.load_config_section(yaml, bot_config, ".") factory = StorageFactory() factory.load_engines_from_config(storage_config) self.assertTrue(factory.storage_engine_available("mongo")) self.assertFalse(factory.storage_engine_available("sql")) self.assertFalse(factory.storage_engine_available("redis")) self.assertFalse(factory.storage_engine_available("file")) self.assertFalse(factory.storage_engine_available("logger")) self.assertFalse(factory.storage_engine_available("other")) self.assertIsNone(factory.storage_engine("other")) self.assertTrue(factory.entity_storage_engine_available("users")) self.assertIsInstance(factory.entity_storage_engine("users"), MongoStorageEngine) self.assertTrue( factory.entity_storage_engine_available("linked_accounts")) self.assertIsInstance(factory.entity_storage_engine("linked_accounts"), MongoStorageEngine) self.assertTrue(factory.entity_storage_engine_available("links")) self.assertIsInstance(factory.entity_storage_engine("links"), MongoStorageEngine) self.assertTrue(factory.entity_storage_engine_available("properties")) self.assertIsInstance(factory.entity_storage_engine("properties"), MongoStorageEngine) self.assertTrue( factory.entity_storage_engine_available("conversations")) self.assertIsInstance(factory.entity_storage_engine("conversations"), MongoStorageEngine) self.assertTrue(factory.entity_storage_engine_available("categories")) self.assertIsInstance(factory.entity_storage_engine("categories"), MongoStorageEngine) self.assertFalse(factory.entity_storage_engine_available("other")) self.assertIsNone(factory.entity_storage_engine("other"))
def test_initialise_with_config_sql_only(self): yaml = YamlConfigurationFile() self.assertIsNotNone(yaml) yaml.load_from_text( """ console: storage: entities: users: sql linked_accounts: sql links: sql properties: sql conversations: sql categories: sql stores: sql: type: sql config: url: sqlite:///:memory echo: false encoding: utf-8 create_db: true drop_all_first: true """, ConsoleConfiguration(), ".") bot_config = yaml.get_section("console") storage_config = StorageConfiguration() storage_config.load_config_section(yaml, bot_config, ".") factory = StorageFactory() factory.load_engines_from_config(storage_config) self.assertTrue(factory.storage_engine_available("sql")) self.assertFalse(factory.storage_engine_available("mongo")) self.assertFalse(factory.storage_engine_available("redis")) self.assertFalse(factory.storage_engine_available("file")) self.assertFalse(factory.storage_engine_available("logger")) self.assertFalse(factory.storage_engine_available("other")) self.assertIsNone(factory.storage_engine("other")) self.assertTrue(factory.entity_storage_engine_available("users")) self.assertIsInstance(factory.entity_storage_engine("users"), SQLStorageEngine) self.assertTrue( factory.entity_storage_engine_available("linked_accounts")) self.assertIsInstance(factory.entity_storage_engine("linked_accounts"), SQLStorageEngine) self.assertTrue(factory.entity_storage_engine_available("links")) self.assertIsInstance(factory.entity_storage_engine("links"), SQLStorageEngine) self.assertTrue(factory.entity_storage_engine_available("properties")) self.assertIsInstance(factory.entity_storage_engine("properties"), SQLStorageEngine) self.assertTrue( factory.entity_storage_engine_available("conversations")) self.assertIsInstance(factory.entity_storage_engine("conversations"), SQLStorageEngine) self.assertTrue(factory.entity_storage_engine_available("categories")) self.assertIsInstance(factory.entity_storage_engine("categories"), SQLStorageEngine) self.assertFalse(factory.entity_storage_engine_available("other")) self.assertIsNone(factory.entity_storage_engine("other"))