mirror of
https://github.com/arcan1s/ahriman.git
synced 2025-09-17 14:19:55 +00:00
feat: add trigger loader guard
This commit is contained in:
@ -47,6 +47,7 @@ class LogsRotationTrigger(Trigger):
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
REQUIRES_REPOSITORY = True
|
||||||
|
|
||||||
def __init__(self, repository_id: RepositoryId, configuration: Configuration) -> None:
|
def __init__(self, repository_id: RepositoryId, configuration: Configuration) -> None:
|
||||||
"""
|
"""
|
||||||
|
@ -336,6 +336,7 @@ class ReportTrigger(Trigger):
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
REQUIRES_REPOSITORY = True
|
||||||
|
|
||||||
def __init__(self, repository_id: RepositoryId, configuration: Configuration) -> None:
|
def __init__(self, repository_id: RepositoryId, configuration: Configuration) -> None:
|
||||||
"""
|
"""
|
||||||
|
@ -103,6 +103,7 @@ class KeyringTrigger(Trigger):
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
REQUIRES_REPOSITORY = True
|
||||||
|
|
||||||
def __init__(self, repository_id: RepositoryId, configuration: Configuration) -> None:
|
def __init__(self, repository_id: RepositoryId, configuration: Configuration) -> None:
|
||||||
"""
|
"""
|
||||||
|
@ -90,6 +90,7 @@ class MirrorlistTrigger(Trigger):
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
REQUIRES_REPOSITORY = True
|
||||||
|
|
||||||
def __init__(self, repository_id: RepositoryId, configuration: Configuration) -> None:
|
def __init__(self, repository_id: RepositoryId, configuration: Configuration) -> None:
|
||||||
"""
|
"""
|
||||||
|
@ -36,6 +36,7 @@ class Trigger(LazyLogging):
|
|||||||
CONFIGURATION_SCHEMA(ConfigurationSchema): (class attribute) configuration schema template
|
CONFIGURATION_SCHEMA(ConfigurationSchema): (class attribute) configuration schema template
|
||||||
CONFIGURATION_SCHEMA_FALLBACK(str | None): (class attribute) optional fallback option for defining
|
CONFIGURATION_SCHEMA_FALLBACK(str | None): (class attribute) optional fallback option for defining
|
||||||
configuration schema type used
|
configuration schema type used
|
||||||
|
REQUIRES_REPOSITORY(bool): (class attribute) either trigger requires loaded repository or not
|
||||||
configuration(Configuration): configuration instance
|
configuration(Configuration): configuration instance
|
||||||
repository_id(RepositoryId): repository unique identifier
|
repository_id(RepositoryId): repository unique identifier
|
||||||
|
|
||||||
@ -59,6 +60,7 @@ class Trigger(LazyLogging):
|
|||||||
|
|
||||||
CONFIGURATION_SCHEMA: ClassVar[ConfigurationSchema] = {}
|
CONFIGURATION_SCHEMA: ClassVar[ConfigurationSchema] = {}
|
||||||
CONFIGURATION_SCHEMA_FALLBACK: ClassVar[str | None] = None
|
CONFIGURATION_SCHEMA_FALLBACK: ClassVar[str | None] = None
|
||||||
|
REQUIRES_REPOSITORY: ClassVar[bool] = True
|
||||||
|
|
||||||
def __init__(self, repository_id: RepositoryId, configuration: Configuration) -> None:
|
def __init__(self, repository_id: RepositoryId, configuration: Configuration) -> None:
|
||||||
"""
|
"""
|
||||||
@ -79,6 +81,16 @@ class Trigger(LazyLogging):
|
|||||||
"""
|
"""
|
||||||
return self.repository_id.architecture
|
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
|
@classmethod
|
||||||
def configuration_schema(cls, configuration: Configuration | None) -> ConfigurationSchema:
|
def configuration_schema(cls, configuration: Configuration | None) -> ConfigurationSchema:
|
||||||
"""
|
"""
|
||||||
|
@ -77,8 +77,9 @@ class TriggerLoader(LazyLogging):
|
|||||||
"""
|
"""
|
||||||
instance = cls()
|
instance = cls()
|
||||||
instance.triggers = [
|
instance.triggers = [
|
||||||
instance.load_trigger(trigger, repository_id, configuration)
|
trigger
|
||||||
for trigger in instance.selected_triggers(configuration)
|
for trigger_name in instance.selected_triggers(configuration)
|
||||||
|
if (trigger := instance.load_trigger(trigger_name, repository_id, configuration)).is_allowed_to_run
|
||||||
]
|
]
|
||||||
|
|
||||||
return instance
|
return instance
|
||||||
|
@ -160,6 +160,7 @@ class UploadTrigger(Trigger):
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
REQUIRES_REPOSITORY = True
|
||||||
|
|
||||||
def __init__(self, repository_id: RepositoryId, configuration: Configuration) -> None:
|
def __init__(self, repository_id: RepositoryId, configuration: Configuration) -> None:
|
||||||
"""
|
"""
|
||||||
|
@ -7,6 +7,13 @@ from ahriman.core.status import Client
|
|||||||
from ahriman.models.result import Result
|
from ahriman.models.result import Result
|
||||||
|
|
||||||
|
|
||||||
|
def test_requires_repository() -> None:
|
||||||
|
"""
|
||||||
|
must require repository identifier to be set to start
|
||||||
|
"""
|
||||||
|
assert LogsRotationTrigger.REQUIRES_REPOSITORY
|
||||||
|
|
||||||
|
|
||||||
def test_configuration_sections(configuration: Configuration) -> None:
|
def test_configuration_sections(configuration: Configuration) -> None:
|
||||||
"""
|
"""
|
||||||
must correctly parse target list
|
must correctly parse target list
|
||||||
|
@ -5,6 +5,13 @@ from ahriman.core.report import ReportTrigger
|
|||||||
from ahriman.models.result import Result
|
from ahriman.models.result import Result
|
||||||
|
|
||||||
|
|
||||||
|
def test_requires_repository() -> None:
|
||||||
|
"""
|
||||||
|
must require repository identifier to be set to start
|
||||||
|
"""
|
||||||
|
assert ReportTrigger.REQUIRES_REPOSITORY
|
||||||
|
|
||||||
|
|
||||||
def test_configuration_sections(configuration: Configuration) -> None:
|
def test_configuration_sections(configuration: Configuration) -> None:
|
||||||
"""
|
"""
|
||||||
must correctly parse target list
|
must correctly parse target list
|
||||||
|
@ -7,6 +7,13 @@ from ahriman.core.sign.gpg import GPG
|
|||||||
from ahriman.core.support import KeyringTrigger
|
from ahriman.core.support import KeyringTrigger
|
||||||
|
|
||||||
|
|
||||||
|
def test_requires_repository() -> None:
|
||||||
|
"""
|
||||||
|
must require repository identifier to be set to start
|
||||||
|
"""
|
||||||
|
assert KeyringTrigger.REQUIRES_REPOSITORY
|
||||||
|
|
||||||
|
|
||||||
def test_configuration_sections(configuration: Configuration) -> None:
|
def test_configuration_sections(configuration: Configuration) -> None:
|
||||||
"""
|
"""
|
||||||
must correctly parse target list
|
must correctly parse target list
|
||||||
|
@ -4,6 +4,13 @@ from ahriman.core.configuration import Configuration
|
|||||||
from ahriman.core.support import MirrorlistTrigger
|
from ahriman.core.support import MirrorlistTrigger
|
||||||
|
|
||||||
|
|
||||||
|
def test_requires_repository() -> None:
|
||||||
|
"""
|
||||||
|
must require repository identifier to be set to start
|
||||||
|
"""
|
||||||
|
assert MirrorlistTrigger.REQUIRES_REPOSITORY
|
||||||
|
|
||||||
|
|
||||||
def test_configuration_sections(configuration: Configuration) -> None:
|
def test_configuration_sections(configuration: Configuration) -> None:
|
||||||
"""
|
"""
|
||||||
must correctly parse target list
|
must correctly parse target list
|
||||||
|
@ -3,6 +3,7 @@ from unittest.mock import MagicMock
|
|||||||
from ahriman.core.configuration import Configuration
|
from ahriman.core.configuration import Configuration
|
||||||
from ahriman.core.report import ReportTrigger
|
from ahriman.core.report import ReportTrigger
|
||||||
from ahriman.core.triggers import Trigger
|
from ahriman.core.triggers import Trigger
|
||||||
|
from ahriman.models.repository_id import RepositoryId
|
||||||
from ahriman.models.result import Result
|
from ahriman.models.result import Result
|
||||||
|
|
||||||
|
|
||||||
@ -13,6 +14,19 @@ def test_architecture(trigger: Trigger) -> None:
|
|||||||
assert trigger.architecture == trigger.repository_id.architecture
|
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:
|
def test_configuration_schema(configuration: Configuration) -> None:
|
||||||
"""
|
"""
|
||||||
must return used configuration schema
|
must return used configuration schema
|
||||||
|
@ -5,6 +5,13 @@ from ahriman.core.upload import UploadTrigger
|
|||||||
from ahriman.models.result import Result
|
from ahriman.models.result import Result
|
||||||
|
|
||||||
|
|
||||||
|
def test_requires_repository() -> None:
|
||||||
|
"""
|
||||||
|
must require repository identifier to be set to start
|
||||||
|
"""
|
||||||
|
assert UploadTrigger.REQUIRES_REPOSITORY
|
||||||
|
|
||||||
|
|
||||||
def test_configuration_sections(configuration: Configuration) -> None:
|
def test_configuration_sections(configuration: Configuration) -> None:
|
||||||
"""
|
"""
|
||||||
must correctly parse target list
|
must correctly parse target list
|
||||||
|
Reference in New Issue
Block a user