mirror of
				https://github.com/arcan1s/ahriman.git
				synced 2025-10-31 13:53:41 +00:00 
			
		
		
		
	feat: add trigger loader guard
This commit is contained in:
		| @ -36,6 +36,7 @@ class Trigger(LazyLogging): | ||||
|         CONFIGURATION_SCHEMA(ConfigurationSchema): (class attribute) configuration schema template | ||||
|         CONFIGURATION_SCHEMA_FALLBACK(str | None): (class attribute) optional fallback option for defining | ||||
|             configuration schema type used | ||||
|         REQUIRES_REPOSITORY(bool): (class attribute) either trigger requires loaded repository or not | ||||
|         configuration(Configuration): configuration instance | ||||
|         repository_id(RepositoryId): repository unique identifier | ||||
|  | ||||
| @ -59,6 +60,7 @@ class Trigger(LazyLogging): | ||||
|  | ||||
|     CONFIGURATION_SCHEMA: ClassVar[ConfigurationSchema] = {} | ||||
|     CONFIGURATION_SCHEMA_FALLBACK: ClassVar[str | None] = None | ||||
|     REQUIRES_REPOSITORY: ClassVar[bool] = True | ||||
|  | ||||
|     def __init__(self, repository_id: RepositoryId, configuration: Configuration) -> None: | ||||
|         """ | ||||
| @ -79,6 +81,16 @@ class Trigger(LazyLogging): | ||||
|         """ | ||||
|         return self.repository_id.architecture | ||||
|  | ||||
|     @property | ||||
|     def is_allowed_to_run(self) -> bool: | ||||
|         """ | ||||
|         whether trigger allowed to run or not | ||||
|  | ||||
|         Returns: | ||||
|             bool: ``True`` in case if trigger allowed to run and ``False`` otherwise | ||||
|         """ | ||||
|         return not (self.REQUIRES_REPOSITORY and self.repository_id.is_empty) | ||||
|  | ||||
|     @classmethod | ||||
|     def configuration_schema(cls, configuration: Configuration | None) -> ConfigurationSchema: | ||||
|         """ | ||||
|  | ||||
| @ -77,8 +77,9 @@ class TriggerLoader(LazyLogging): | ||||
|         """ | ||||
|         instance = cls() | ||||
|         instance.triggers = [ | ||||
|             instance.load_trigger(trigger, repository_id, configuration) | ||||
|             for trigger in instance.selected_triggers(configuration) | ||||
|             trigger | ||||
|             for trigger_name in instance.selected_triggers(configuration) | ||||
|             if (trigger := instance.load_trigger(trigger_name, repository_id, configuration)).is_allowed_to_run | ||||
|         ] | ||||
|  | ||||
|         return instance | ||||
|  | ||||
| @ -3,6 +3,7 @@ from unittest.mock import MagicMock | ||||
| from ahriman.core.configuration import Configuration | ||||
| from ahriman.core.report import ReportTrigger | ||||
| from ahriman.core.triggers import Trigger | ||||
| from ahriman.models.repository_id import RepositoryId | ||||
| from ahriman.models.result import Result | ||||
|  | ||||
|  | ||||
| @ -13,6 +14,19 @@ def test_architecture(trigger: Trigger) -> None: | ||||
|     assert trigger.architecture == trigger.repository_id.architecture | ||||
|  | ||||
|  | ||||
| def test_is_allowed_to_run(trigger: Trigger) -> None: | ||||
|     """ | ||||
|     must return flag correctly | ||||
|     """ | ||||
|     assert trigger.is_allowed_to_run | ||||
|  | ||||
|     trigger.repository_id = RepositoryId("", "") | ||||
|     assert not trigger.is_allowed_to_run | ||||
|  | ||||
|     trigger.REQUIRES_REPOSITORY = False | ||||
|     assert trigger.is_allowed_to_run | ||||
|  | ||||
|  | ||||
| def test_configuration_schema(configuration: Configuration) -> None: | ||||
|     """ | ||||
|     must return used configuration schema | ||||
|  | ||||
		Reference in New Issue
	
	Block a user