Source code for fmn.rules.filter

# SPDX-FileCopyrightText: Contributors to the Fedora Project
#
# SPDX-License-Identifier: MIT

from fnmatch import fnmatch

from fedora_messaging import message

from .requester import Requester


[docs]class Filter: name: str def __init__(self, requester: Requester, params, username): self._requester = requester self.params = params self.username = username
[docs] def matches(self, message: message.Message): raise NotImplementedError
[docs]class Applications(Filter): name = "applications" def __init__(self, requester: Requester, params, username): if params: params = [app_name.lower() for app_name in params] super().__init__(requester=requester, params=params, username=username)
[docs] def matches(self, message): if not self.params: return True return message.app_name.lower() in self.params
[docs]class Severities(Filter): name = "severities" default = (message.INFO, message.WARNING, message.ERROR) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self._severities = [getattr(message, level.upper()) for level in (self.params or [])] if not self._severities: self._severities = self.default
[docs] def matches(self, message): return message.severity in self._severities
[docs]class MyActions(Filter): name = "my_actions"
[docs] def matches(self, message): if not self.params and self.username == message.agent_name: return False return True
[docs]class Topic(Filter): name = "topic"
[docs] def matches(self, message): if not self.params: return True return fnmatch(message.topic, self.params)