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 bool(message.app_name) and message.app_name.lower() in self.params
[docs] class ExcludedApplications(Applications): name = "excluded_applications"
[docs] def matches(self, message): if not self.params: return True return (not message.app_name) or (message.app_name.lower() not 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)