diff --git a/config.py b/config.py index 90d1a8b..2a8f86a 100644 --- a/config.py +++ b/config.py @@ -203,6 +203,19 @@ class AlltalkTTSEnginesConfig(AbstractConfig): def save(self, path: Path | str | None = None): self._save_file(path) + def is_valid_engine(self, engine_name): + return engine_name in self.get_engine_names_available() + + def change_engine(self, requested_engine): + if requested_engine == self.engine_loaded: + return self + for engine in self.engines_available: + if engine["name"] == requested_engine: + self.engine_loaded = requested_engine + self.selected_model = engine["selected_model"] + return self + return self + class AlltalkConfig(AbstractConfig): __instance = None @@ -234,6 +247,9 @@ class AlltalkConfig(AbstractConfig): AlltalkConfig.__instance._reload_on_change() return AlltalkConfig.__instance + def get_output_directory(self): + return self.__this_dir / self.output_folder + def save(self, path: Path | str | None = None): self._save_file(path, lambda o: o.__dict__) @@ -250,5 +266,4 @@ class AlltalkConfig(AbstractConfig): self.theme.clazz = data.theme.__dict__["class"] # As a side effect, create the output directory: - output_directory = self.__this_dir / self.output_folder - output_directory.mkdir(parents=True, exist_ok=True) + self.get_output_directory().mkdir(parents=True, exist_ok=True) diff --git a/test/test_config.py b/test/test_config.py index 0bc9c8a..39a46ba 100644 --- a/test/test_config.py +++ b/test/test_config.py @@ -9,8 +9,8 @@ from config import AlltalkConfig, AlltalkTTSEnginesConfig class TestAlltalkConfig(unittest.TestCase): def setUp(self): - self.config = AlltalkConfig.get_instance() - self.ttsEnginesConfig = AlltalkTTSEnginesConfig.get_instance() + self.config = AlltalkConfig.get_instance().reload() + self.ttsEnginesConfig = AlltalkTTSEnginesConfig.get_instance().reload() def test_default_config_path(self): expected_config_path = Path(__file__).parent.parent.resolve() / "confignew.json" @@ -127,6 +127,17 @@ class TestAlltalkConfig(unittest.TestCase): self.assertEqual(self.ttsEnginesConfig.selected_model, "piper") self.assertListEqual(self.ttsEnginesConfig.get_engine_names_available(), ["parler", "piper", "vits", "xtts", "f5tts"]) + def test_is_valid_engine(self): + for engine in ["parler", "piper", "vits", "xtts", "f5tts"]: + self.assertTrue(self.ttsEnginesConfig.is_valid_engine(engine)) + + self.assertFalse(self.ttsEnginesConfig.is_valid_engine("foo")) + + def test_change_tts_engine(self): + self.ttsEnginesConfig.change_engine("vits") + self.assertEqual(self.ttsEnginesConfig.engine_loaded, "vits") + self.assertEqual(self.ttsEnginesConfig.selected_model, "vits - tts_models--en--vctk--vits") + def test_tts_engines_default_config_path(self): expected_config_path = os.path.join(Path(__file__).parent.parent.resolve(), "system", "tts_engines", "tts_engines.json") self.assertEqual(self.ttsEnginesConfig.get_config_path(), Path(expected_config_path))