diff --git a/py/config.py b/py/config.py index 6bbf8ba3..b5ad1e49 100644 --- a/py/config.py +++ b/py/config.py @@ -194,6 +194,8 @@ class GalleryConfig: Attributes: MONITORING_ENABLED (bool): Enable/disable automatic image monitoring + SAVE_FOREIGN_RUNS (bool): The monitor stores the certain prompt of an + output whose workflow has no PromptManager node (#247) MONITORING_DIRECTORIES (List[str]): Directories to monitor for new images SUPPORTED_EXTENSIONS (List[str]): Image file extensions to process PROCESSING_DELAY (float): Delay in seconds before processing new files @@ -210,6 +212,8 @@ class GalleryConfig: # Image monitoring settings MONITORING_ENABLED = True + # Read by the monitor for every file, so a save applies without a restart + SAVE_FOREIGN_RUNS = True MONITORING_DIRECTORIES = [] # Auto-detect if empty SUPPORTED_EXTENSIONS = [".png", ".jpg", ".jpeg", ".webp", ".gif"] PROCESSING_DELAY = 2.0 # Seconds to wait before processing new files @@ -251,6 +255,7 @@ class GalleryConfig: return { "monitoring": { "enabled": cls.MONITORING_ENABLED, + "save_foreign_runs": cls.SAVE_FOREIGN_RUNS, "directories": cls.MONITORING_DIRECTORIES, "extensions": cls.SUPPORTED_EXTENSIONS, "processing_delay": cls.PROCESSING_DELAY, @@ -303,6 +308,14 @@ class GalleryConfig: config_logger.warning( "Ignoring gallery monitoring enabled: expected true or false" ) + if "save_foreign_runs" in monitoring: + if isinstance(monitoring["save_foreign_runs"], bool): + cls.SAVE_FOREIGN_RUNS = monitoring["save_foreign_runs"] + else: + config_logger.warning( + "Ignoring gallery monitoring save_foreign_runs: expected true " + "or false" + ) if "directories" in monitoring: directories = cls._validated_directories(monitoring["directories"]) if directories is not None: diff --git a/tests/test_config.py b/tests/test_config.py index d099bd60..f2d9a353 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -59,6 +59,28 @@ class TestGalleryConfig(unittest.TestCase): self.assertFalse(GalleryConfig.MONITORING_ENABLED) self.assertEqual(GalleryConfig.PROCESSING_DELAY, 5.0) + def test_save_foreign_runs_defaults_on_and_only_booleans_apply(self): + """#247: gallery.monitoring.save_foreign_runs, default true.""" + self.assertIs( + GalleryConfig.get_config()["monitoring"]["save_foreign_runs"], True + ) + GalleryConfig.update_config({"monitoring": {"save_foreign_runs": False}}) + self.assertIs(GalleryConfig.SAVE_FOREIGN_RUNS, False) + for junk in ("true", 1, None): + with self.subTest(value=junk): + with self.assertLogs("prompt_manager.config", "WARNING") as logs: + GalleryConfig.update_config( + {"monitoring": {"save_foreign_runs": junk}} + ) + self.assertIn( + "Ignoring gallery monitoring save_foreign_runs: expected true " + "or false", + "\n".join(logs.output), + ) + self.assertIs(GalleryConfig.SAVE_FOREIGN_RUNS, False) + GalleryConfig.update_config({"monitoring": {"save_foreign_runs": True}}) + self.assertIs(GalleryConfig.SAVE_FOREIGN_RUNS, True) + def test_update_tracking(self): GalleryConfig.update_config({"tracking": {"prompt_timeout": 300}}) self.assertEqual(GalleryConfig.PROMPT_TIMEOUT, 300)